hibernate总结

1.key是指外键
比如:

<hibernate-mapping>
<class name="com.domain.Classes" table="classes" >
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<property name="name" type="java.lang.String">
<column name="name" not-null="true" />
</property>
<bag name="studentNames" table="student">
<!-- key对应的都是外键,其意思也就是拿该外键和<id>的主键值匹配,取集合 -->
<key column="classId"></key>
<element column="name" type="string"></element>
</bag>

</class>
</hibernate-mapping>


2.many开头的是持有外键

<hibernate-mapping>
<class name="com.domain.Computer" table="computer" catalog="onetoone">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>

<property name="name" type="java.lang.String">
<column name="name" not-null="true" />
</property>

<!-- many开头的是代表该表持有外键 -->
<many-to-one name="student" class="com.domain.Student" unique="true">
<column name="student_id" />
</many-to-one>
</class>
</hibernate-mapping>


3.在many-to-many里,由inverse控制得到主动权后,在 save的对象赋值的时候,不需要双向赋值,只

需要给掌握主动权的对象赋值即可。没有inverse的(比如one-to-one里),需要给双方都赋值,比如



Session session = HibernateSessionFactory.getSession();

Teacher teacher1 = new Teacher();
teacher1.setName("teacher1");

Teacher teacher2 = new Teacher();
teacher2.setName("teacher2");

Teacher teacher3 = new Teacher();
teacher3.setName("teacher3");

Student student1 = new Student();
student1.setName("student1");

Student student2 = new Student();
student2.setName("student2");
//student1.getTeachers().add(teacher1);student1.getTeachers().add

(teacher2);student2.getTeachers().add(teacher1);这几句代码可以不要,因为Teacher掌握主动权

。所以下面几句代码给注释掉了
// //学生一有2个老师
// student1.getTeachers().add(teacher1);
// student1.getTeachers().add(teacher2);
//
// //学生二有一个老师
// student2.getTeachers().add(teacher1);

//因为老师是inverse="false" ,老师掌握主动权
//第一个老师有2个学生
teacher1.getStudents().add(student1);
teacher1.getStudents().add(student2);

//第二个老师有一个学生
teacher2.getStudents().add(student1);

session.saveOrUpdate(teacher1);
session.saveOrUpdate(teacher2);
session.beginTransaction().commit();
session.close();


4.<one-to-one><one-to-many><many-to-many>都没有 invsere属性,因为inverse属性的意思是是否为

虚的,比如:invere="true"就是表示该表的操作不会影响到关系表。
比如one-to-one中,通过关系表实现

通过关系表实现:

DROP TABLE IF EXISTS `st`;
create table stu_com(
stu_id int not null,
com_id int not null
)ENGINE=InnoDB DEFAULT CHARSET=utf8;


<!--optional="true"的意思是只有当stu_id 和 com_id 都不为空时才在关系表里插入。这样也会插入

2遍,所以需要inverse="true"把一方设置为虚的。即不让插入到关系表中-->
<join table="stu-com" optional="true" inverse="true">
<key column="com_id"/>
<many-to-one name="student" column="stu_id" unique="true"/>
</join>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值