一,单向 n对1关联
1,在n 端的bean类中加入属性 : private Customer customer;
2,在 n端的配置文件中配置: <many-to-one name="customer" class="com.m01.n21.Customer" column="CUSTOMER_ID">
name : n端bean类的属性名; class: 1端Bean类的全名; column: 在n端对应的数据库中 对1端对应数据库 的外键
注: ,查询n端数据时 默认会赖查询,即只查询本表数据,只有用到1端的数据时,才会再次去查询,同load()方法相似。
二 ,双向 n对1关联
1,n端的操作同上。
2,在1端的Bean类中加入属性 : Set<Order> orders=new HashSet<>();
. orders 必须初始化,防止空指针异常;声明集合类型时要使用接口类型,因为hibernate在获取集合类型时,返回的是hibernate内置
的集合类型不是JavaSE的标准集合实现
在1端的配置文件中配置
<set name="orders" table="ORDERS" inverse="true" cascade="save-update">
<key column="CUSTOMER_ID"></key>
<one-to-many class="com.m01.n21.both.Order"/>
</set>
name : n端bean类中的属性; table: 1端对应的数据表名; inverse :设置是否维护关联关系,默认为false 设为true 提高性能
cascade : 级联操作 有[delete,delete-orpan,save-update];
column : 在n端对应数据表中的指向n端对应表的 外键;
class : n端对应bean的全类名;
在hibernate中 有些类没有对应数据表,且是另一些类的属性,比如自定义的 Content类是Book类的一个属性:
private Content content;
那么 在 Book类对应的mapping文件中应这样映射这个content属性
<component name="content" class="com.m01.bean.Content">
<parent name="book"/><!-- 可有可無。若有,必须在Content中声明该属性-->
<property name="page" column="page"/>
<property name="tests" column="tests"/>
</component>
name: Book类中对应的属性; class :对应 该属性的全类名;
name : Content类中的属性; column : Book类对应数据表中的列名
补:
在Java中 Java.util,Date和 java.util.Calendar代表时间和日期;
jdbc的API在Java.util,Date扩展了java.sql.Date和Java.sql.Time,java.sql.Timestamp
分别对应sql类型的 DATE,TIME,TIMESTAMP
原文:http://www.cnblogs.com/m01qiuping/p/6380140.html