文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
Demo
实体对象
public class Customer {
private Integer customerId;
private String customerName;
private Set<Order> orders = new HashSet<Order>();
//省去 get 和 set
}
public class Order {
private Integer orderId;
private String orderName;
private Customer customer;
//省去 get 和 set
}
Customer.hbm.xml
<hibernate-mapping package="com.lihui.hibernate.double_n_1">
<class name="Customer" table="CUSTOMERS">
<id name="customerId" type="java.lang.Integer">
<column name="CUSTOMER_ID" />
<generator class="native" />
</id>
<property name="customerName" type="java.lang.String">
<column name="CUSTOMER_NAME" />
</property>
<set name="orders" inverse="true">
<key column="CUSTOMER_ID"></key>
<one-to-many class="Order"/>
</set>
</class>
</hibernate-mapping>
set
name 属性: 设定待映射的持久化类的属性的
inverse 属性:
- 在 hibernate 中通过对 inverse 属性的来决定是由双向关联的哪一方来维护表和表之间的关系。 inverse = false 的为主动方,inverse = true 的为被动方,由主动方负责维护关联关系。在没有设置 inverse=true 的情况下,父子两边都维护父子关系
- 在 1-N 关系中,将 N 方设为主控方将有助于性能改善(如果要国家元首记住全国人民的名字,不是太可能,但要让全国人民知道国家元首,就容易的多)
- 在 1-N 关系中,若将 1 方设为主控方,会额外多出 update 语句。插入数据时无法同时插入外键列,因而无法为外键列添加非空约束。
order-by 属性:
- 如果设置了该属性,当 Hibernate 通过 select 语句到数据库中检索集合对象时,利用 order by 子句进行排序
- order-by 属性中还可以加入 SQL 函数 例如:
key
设定与所关联的持久化类对应的表的外键
- column: 指定关联表的外键名
one-to-many
设定集合属性中所关联的持久化类
- class: 指定关联的持久化类的类名
Order.hbm.xml
<hibernate-mapping package="com.lihui.hibernate.double_n_1">
<class name="Order" table="ORDERS">
<id name="orderId" type="java.lang.Integer">
<column name="ORDER_ID" />
<generator class="native" />
</id>
<property name="orderName" type="java.lang.String">
<column name="ORDER_NAME" />
</property>
<many-to-one name="customer" class="Customer" cascade="all" column="CUSTOMER_ID"></many-to-one>
</class>
</hibernate-mapping>
我最近在复习一下关于 Hibernate 关系映射的知识,看了书本的介绍以及视频。这几篇博客都是对学到知识的一点总结。当然,这些这是最基本的能够实现关联关系的配置,在实际的使用中,还有很多参数需要根据情况来设置。但也算是对以后开发过程中遇到遗忘的地方可以进行查阅。
在本文中使用的 Demo 也都已经上传到 github 中,里边有详细的运行说明。
Github 地址: HibernateRelationMapping
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论