hibernate双向一对多映射
2024-10-21 06:07:03
双向多对一 :Customer类------------》一的一端 Order类-----------》多的一端
Customer类:(省略set()、get()和构造方法)
private Integer customerId;
private String customerName; private Set<Order> order = new HashSet<>();
Order类:(省略set()、get()和构造方法)
private Integer orderId;
private String orderName;
private Customer customer;
Customer类的映射文件:
<!-- 映射类和数据表 -->
<class name="Customer" table="CUSTOMERS">
<!-- 映射OID和数据表的主键 -->
<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> <!-- 映射 1对多的那个集合属性-->
<!-- set:映射set类型的属性,table:set中的元素对应的记录放在哪一个数据表中.该值需要和多对一的多的那个表的名字一致 -->
<!-- inverse:指定由哪一方来维护关联关系,通常设置为true,以指定由多的一端来维护关联关系 -->
<!-- cascade:设定级联操作.值为delete时删除一的这端时会把多的那端的对应记录也删除.delete-orphan解除关系(删除孤儿).save-update级联保存
开发时不建议设定该属性.建议使用手工的方式来处理 -->
<!-- order-by:在查询时对集合中的元素进行排序,order-by中使用的是表的字段名,而不是持久化类的属性名 -->
<set name="order" table="ORDERS" inverse="true" order-by="ORDER_NAME DESC"><!-- 对应那个表inverse反转,放弃维护关联关系 -->
<!-- 指定多的表中的外键列的名字 -->
<key column="CUSTOMER_ID"></key><!-- 外键名 -->
<one-to-many class="Order"/><!-- 指定映射的类型 -->
</set>
Order类的映射文件:
<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="com.nzx.hibernate2.n21.both.Customer" column="CUSTOMER_ID"> </many-to-one>
junit类:
package com.nzx.hibernate2.n21.both; import static org.junit.Assert.*; import org.hibernate.LazyInitializationException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; public class HibernateTest { private SessionFactory sessionFactory;
private Session session;
private Transaction transaction; @Before
public void init() { // 读取hibernate.cfg.xml文件
Configuration cfg = new Configuration().configure(); ServiceRegistry serviceRigestry = new ServiceRegistryBuilder()
.applySettings(cfg.getProperties()).buildServiceRegistry(); sessionFactory = cfg.buildSessionFactory(serviceRigestry); session = sessionFactory.openSession();
transaction = session.beginTransaction();
} @After
public void destroy() { // 关闭session、sessionFactory transaction.commit();
session.close();
sessionFactory.close();
} @Test
public void testMany2One(){
Customer customer = new Customer();
customer.setCustomerName("BB"); Order order1 = new Order();
order1.setOrderName("ORDER_9"); Order order2 = new Order();
order2.setOrderName("ORDER_7"); //设定关联关系
order1.setCustomer(customer);
order2.setCustomer(customer); customer.getOrder().add(order1);
customer.getOrder().add(order2); /*
* 先插入一的一端
*/
session.save(customer);
session.save(order1);
session.save(order2); /*
* 先插入多的一端
*
*/
// session.save(order1);
// session.save(order2);
// session.save(customer);
} }
最新文章
- iOS6新特征:UICollectionView介绍
- VC 6中配置OpenGL开发环境
- PHP中的常用魔术方法
- HDU 3333 &; 主席树
- (转)实战Memcached缓存系统(5)Memcached的CAS程序实例
- C++ new operator, delete operator, operator new, operator delete, new placement
- idea 多模块项目依赖父工程class找不到问题
- Repository 设计模式介绍(转)
- Linux CentOS 7 防火墙/端口设置
- 必须先将 ContentLength 字节写入请求流,然后再调用 [Begin]GetResponse。解决方法
- 实现LNMP
- PAT 输出华氏-摄氏温度转换表
- windows端运行.sh脚本
- Android P正式版即将到来:后台应用保活、消息推送的真正噩梦
- 【2018.05.09 Python学习及实践】个人项目中使用的Python库备忘-持续更新
- String.format(String format, Object... args)方法详解
- mvc项目用log4net 记录错误日志
- 从返回的json格式的data数据内随机取得n个
- div+css隐藏内容样式方法
- RabbitMQ入门:工作队列(Work Queue)
热门文章
- HTML表格基础详解
- unity3d Billboard
- java的几个特性
- tshop-pbsm-shop-nav-ch结构和样式分析
- 泳池水面fresnel 的近似替代
- python 小技巧(glob,guid,序列化,压缩字符,有序字典,sorted函数,分片)
- 2017.9.15 postgres使用postgres_fdw实现跨库查询
- 2017.8.4 Creating Server TCP listening socket *:6379: bind: No such file or directory
- PHP防止sql注入-JS注入
- [阿里Hao]Android无线开发的几种经常使用技术