Hibernate建立多对一的单向关联关系

来源:互联网 发布:越狱苹果抹除所有数据 编辑:程序博客网 时间:2024/05/19 19:30

以下内容整理自《精通Hibernate》第二版

映射代码:

<span style="font-size:18px;"><many-to-one        name="customer"        column="CUSTOMER_ID"        class="mypack.Customer"        not-null="true"        lazy="false"/></span>

<many-to-one>元素建立了customer属性和ORDERS表的外键CUSTOMER_ID之间的映射。它包括以下属性。
 
name:设定待映射的持久化类的属性的名字,此处为Order类的customer属性。
column:设定和持久化类的属性对应的表的外键,此处为ORDERS表的外键CUSTOMER_ID。
class:设定待映射的持久化类的属性的类型,此处设定customer属性为Customer类型。
not-null:如果为true,表示customer属性不允许为null,该属性的默认值为false。not-null属性会影响hbm2ddl工具生成的数据库schema,hbm2ddl工具会为ORDERS表的CUSTOMER_ID外键设置not null约束,但not-null属性不会影响hbm2java工具生成Java源代码。此外,not-null属性还会影响Hibernate的运行时行为,Hibernate在向数据库中保存Order对象时,会先检查它的customer属性是否为null。
lazy:如果为proxy,表示对关联的Customer对象使用延迟检索策略并且使用代理,这是默认值。如果为false,就意味着当Hibernate从数据库中加载Order对象时,还会立即自动加载与它关联的Customer对象

注:当Hibernate持久化一个临时对象(指刚通过new语句创建),在默认情况下,它不会自动持久化所关联的其他临时对象,所以会抛出TransientObjectException异常。如果希望当Hibernate持久化一个临时对象时自动持久化所关联的临时对象,可以把<many-to-one>的cascade属性设为"save-update",cascade属性的默认值为"none"。
当cascade属性为"save-update",表明保存或更新当前对象时(即执行insert或update语句时),会级联保存或更新与它关联的对象。

0 0
原创粉丝点击