多种类型映射
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
多种类型映射
create table customers(
id bigint not null primary key,--long
name varchar(15) not null,
email varchar(128) not null,
password varchar(8) not null,
phone int,
address varchar(255),
sex char(1),
is_married bit,--boolean类型
description text,--String类型
image blob,---大容量体积存放图片二进制代码private byte[] image;
birthday date,---java.util.date
registeredtime timestamp--时间戳private Timestamp registeredTime;
);
HQL 语句类似于SQL语句
不过里面查询的不是表名和列名
而是类名和类中的变量名
customersList =
session.createQuery("from Customers as c order by asc").list();--不选全部则不能返回customers集合
表与表的关联一对多
Teacher表
create table Teacher(
id bigint not null,
name varchar(15),
primary key(id)
);
Student表
create table Student(
id bigint not null,
name varchar(15),
teacher_id bigint not null,
primary key(id)
);
倘若平时在数据库中我们要人为加入外键约束
Alter table Student add constraint fk_customer_id foreign key(teacher_id) references Teacher(id);
Teacher类中
private Set
映射文件中
在多的一方student类中
private Teacher teacher;
那么只要双方关联t.getStudents().add(s1);
t.getStudents().add(s2);
s1.setTeacher(t);
s2.setTeacher(t);在session.save(teacher)时候Hibernate: insert into teacher (name, id) values (?, ?)
Hibernate: insert into student (name, teacher_id, id) values (?, ?, ?) Hibernate: insert into student (name, teacher_id, id) values (?, ?, ?) 同时把相关联的student也插入数据库
如果只保存学生而不保存老师必然出错因为Teacher没插入到数据库还是临时对象没有id 此时Student内的teacher没有id,student必然无法插入到数据库(没有teacher_id)
如果没有
s1.setTeacher(t);
s2.setTeacher(t);则运行报错
则往数据库里插入student记录时无法通过s1.getTeacher().getId()得到teacher_id值自然就无法插入
如果没有t.getStudents().add(s1);
t.getStudents().add(s2);---则保存老师的同时不会保存学生
inverse="false"---维持双方1对多的关系的维持权主控权还是在1的一方即Teacher一方
如果inverse=false由一的一方维持关系
Hibernate: insert into teacher (name, id) values (?, ?) Hibernate: insert into student (name, teacher_id, id) values (?, ?, ?) Hibernate: insert into student (name, teacher_id, id) values (?, ?, ?) Hibernate: update student set teacher_id=? where id=? Hibernate: update student set teacher_id=? where id=?
如果主控方是老师那么老师的记录插入后还不知道被控方的消息主控方必须等待被控方执行完毕(即学生记录插入) 然后有了被控方消息主控方方能再一次维持和被控方的消息(意即主控方只有等被控方全部插入数据库后方能再次去更新和被控方的关系)
但是如果主控方是学生那么首先是将被控方插入就是老师先插入然后主控方自然就知道被控方的所有消息那么主控方在