hibernate annotation 之 一对一单向外键关联(三)

2014-11-24 09:46:34 · 作者: · 浏览: 1
nt0_.id=

若将 query 方法里被注释的行去掉,后台除了会发出 Student 的 select SQL 语句之外,还会发出 StudentCard 的 select SQL :

Hibernate:
select
student0_.id as id0_0_,
student0_.name as name0_0_,
student0_.studentCard_id as studentC3_0_0_
from
Student student0_
where
student0_.id=
Hibernate:
select
studentcar0_.id as id1_0_,
studentcar0_.date as date1_0_
from
StudentCard studentcar0_
where
studentcar0_.id=

4. 更新数据 ( 级联更新 )

在 Junit 测试类中执行 update 方法,后台发出 Student 的 update SQL 语句 :

Hibernate:
update
Student
set
name= ,
studentCard_id=
where
id=

若将 update 方法中的注释行去掉,后台除了会发出 Student 的 update SQL 语句之外,还会发出 StudentCard 的 update SQL :

Hibernate:
update
Student
set
name= ,
studentCard_id=
where
id=
Hibernate:
update
StudentCard
set
date=
where
id=

注 : 只有当 Student 对象的属性值发生变化时,才会发出 Student 的 update SQL,如果 Student 对象中的属性值没有发生过改变,

则不会发出 Student 的 update SQL ; StudentCard 也是一样的。

5. 删除数据 ( 级联删除 )

在 Junit 测试类中执行 delete 方法,后台发出 Student 和 StudentCard 的 delete SQL 语句 :

Hibernate:
delete
from
Student
where
id=
Hibernate:
delete
from
StudentCard
where
id=

由于是 CascadeType.ALL 的级联策略,当从表中的记录被删除时,主表中被关联的记录也将会被删除掉。

若是将 delete 方法中的注释行去掉,将最后注释行的下一行注释掉,也就是如果将 session.delete(student); 这行 注释起来的话,

后台将抛出 org.hibernate.ObjectDeletedException 的异常,这是由于从表 student 关联了主表 studentcard,因此不能直接去删除

studentcard 表中被 student 表参考的记录。