笔记:Hibernate 持久化类标注示例-双向1-N关系映射
- 1-N关系的1端持久化类
package org.drsoft.hibernate.model.oneToMany;
import java.util.Date;
import java.util.Set;
import javax.persistence.*;
@Entity
@Table(name = "OneToMany_One")
public class OneToManyForOneModel {
@Id
@Column(name = "Record_ID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int recordID;
@Column(name = "Total_Trade_Amt")
private long totalTradeAmt;
@Column(name = "Modify_Time")
private Date modifyTime;
@Column(name = "Create_Time", insertable = false, updatable = false)
private Date createTime;
@OneToMany(cascade = {
CascadeType.PERSIST }, fetch = FetchType.LAZY, targetEntity = OneToManyForManyModel.class, orphanRemoval = false,mappedBy="oneToManyForOneModel")
private Set<OneToManyForManyModel> details;
省略setter和getter
}
- 1-N关系的N端持久化类
package org.drsoft.hibernate.model.oneToMany;
import java.util.Date;
import javax.persistence.*;
@Entity
@Table(name = "OneToMany_Many")
public class OneToManyForManyModel {
@Id
@Column(name = "Detail_ID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int detailID;
@Column(name = "Trade_Amt")
private long tradeAmt;
@Column(name = "Create_Time", insertable = false, updatable = false)
private Date createTime;
@ManyToOne
@JoinColumn(name = "Ref_Record_ID", referencedColumnName = "Record_ID")
private OneToManyForOneModel oneToManyForOneModel;
省略setter和getter
}
- 测试调用
package org.drsoft.hibernate.manager.oneToMany;
import java.util.*;
import org.drsoft.hibernate.model.oneToMany.*;
import org.drsoft.utils.hibernateUtils;
import org.hibernate.Session;
import org.hibernate.Transaction;
public class OneToManyManager {
public static void main(String[] args) {
Session curSession = hibernateUtils.openSession();
Transaction curTransaction = null;
Calendar calendar = Calendar.getInstance(Locale.CHINA);
try {
System.out.println("#1 创建 One 和 Many数据");
// #1 创建 One 和 Many数据
OneToManyForOneModel oneToManyForOneModel = new OneToManyForOneModel();
long totalTradeAmt = 0;
for (int i = 0; i < 5; i++) {
OneToManyForManyModel oneToManyForManyModel = new OneToManyForManyModel();
oneToManyForManyModel.setTradeAmt(calendar.get(Calendar.SECOND) + i);
totalTradeAmt = totalTradeAmt + oneToManyForManyModel.getTradeAmt();
if (oneToManyForOneModel.getDetails() == null) {
oneToManyForOneModel.setDetails(new HashSet<OneToManyForManyModel>());
System.out.println("创建 HashSet<OneToManyForManyModel>()");
}
oneToManyForOneModel.getDetails().add(oneToManyForManyModel);
}
oneToManyForOneModel.setTotalTradeAmt(totalTradeAmt);
oneToManyForOneModel.setModifyTime(new Date());
curTransaction = hibernateUtils.beginTransaction(curSession);
curSession.persist(oneToManyForOneModel);
curTransaction.commit();
System.out.println("#2 查询 One 数据");
// #2 查询 One 数据
oneToManyForOneModel = (OneToManyForOneModel) curSession.load(OneToManyForOneModel.class, new Integer(1));
System.out.println("OneToManyForOneModel RecordID=" + oneToManyForOneModel.getRecordID()
+ "\tTotalTradeAmt=" + oneToManyForOneModel.getTotalTradeAmt());
Set<OneToManyForManyModel> details = oneToManyForOneModel.getDetails();
Iterator<OneToManyForManyModel> it = details.iterator();
while (it.hasNext()) {
OneToManyForManyModel obj = it.next();
System.out.println(
"OneToManyForManyModel DetailID=" + obj.getDetailID() + "\tTradeAmt=" + obj.getTradeAmt());
}
} catch (Exception e) {
if (curTransaction != null && curTransaction.isActive()) {
curTransaction.rollback();
}
throw e;
} finally {
if (curSession != null) {
curSession.close();
}
}
}
}
笔记:Hibernate 持久化类标注示例-双向1-N关系映射的更多相关文章
- 笔记:Hibernate 持久化类标注说明
持久化类标注 标注 @Entity:注解声明该类是一个Hibernate的持久化类 标注 @Table:指定该类映射的表 参数 name:指定映射数据库表的名称 参数 uniqueConstraint ...
- (转) Hibernate持久化类与主键生成策略
http://blog.csdn.net/yerenyuan_pku/article/details/65462930 Hibernate持久化类 什么是持久化类呢?在Hibernate中持久化类的英 ...
- Hibernate框架(三)框架中的关系映射
在设计数据库时我们会考虑,表与表之间的关系,例如我们前边经常提到的一对一,一对多,多对多关系,在数据库中我们通过外键,第三张表等来实现这些关系.而Hibernate时间实体类和数据库中的表进行的映射, ...
- Hibernate持久化类属性映射
Hibernate充当应用程序和数据库之间的中间件,实现二者之间的交互操作,他对JDBC进行了封装,以完全面向对象的方式来操作数据. 适用于有多个数据源的情况下,不必去考虑不同数据源的操作差异. Hi ...
- hibernate持久化类中,修改字符串长度时,注意的问题
在使用hibernate注解修饰字符串长度时,如果一开始没有把String类型的变量长度设计好,在网数据库插入数据时,容易造成字段长度超出错误,这时候需要修改@Column里length的大小.如果使 ...
- Hibernate持久化类规则
注意事项: 提供无参的构造方法,因为在hibernate需要使用反射生成类的实例 提供私有属性,并对这些属性提供公共的setting和getting方法,因为在hibernate底层会将查询到的数据进 ...
- (补充)06.Hibernate持久化类&持久化对象
持久化类:就是一个Java类(JavaBean),这个类与表建立映射关系就可以成为是持久类 持久化类 = JavaBean + xxx.hbm.xml 编写规则: 1.提供一个无参数,public访问 ...
- Hibernate框架之双向多对多关系映射
昨天跟大家分享了Hibernate中单向的一对多.单向多对一.双向一对多的映射关系,今天跟大家分享下在Hibernate中双向的多对多的映射关系 这次我们以项目和员工举个栗子,因为大家可以想象得到,在 ...
- Mybatis框架中实现双向一对多关系映射
学习过Hibernate框架的伙伴们很容易就能简单的配置各种映射关系(Hibernate框架的映射关系在我的blogs中也有详细的讲解),但是在Mybatis框架中我们又如何去实现 一对多的关系映射呢 ...
随机推荐
- swift 之归档和解归档
swift 之归档和解归档 数据持久化的方式有很多种,归档是其中的一种,说起数据持久化的方式,iOS 中基本有以下几种方式:sqlite存储.coredata存储.UserDefault存储.归档.p ...
- C#访问修饰符(public,private,protected,internal,sealed,abstract)
为了控件C#中的对象的访问权限,定义对象时可以在前面添加修饰符. 修饰符有五种:private(私有的),protected(受保护的),internal(程序集内部的),public(公开的),以及 ...
- freemarker写select组件(二)
freemarker写select组件 1.宏定义 <#macro select id datas value=""> <select id="${id ...
- C#图解教程 第十章 结构
结构 什么是结构结构是值类型对结构赋值构造函数和析构函数 实例构造函数静态构造函数构造函数和析构函数小结 字段初始化语句是不允许的结构是密封的装箱和拆箱结构作为返回值和参数 关于结构的其他信息 结构 ...
- iOS超全开源框架、项目和学习资料汇总 UI篇
上下拉刷新控件 MJRefresh --仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明. AutoLayout ...
- ssm整合快速入门程序(一)
整合基础说明 spring 是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用.Spring是于2003 年兴起的一个轻量级的Jav ...
- Luogu Dynamic Ranking (带修改的主席树)
题目大意: 网址:https://www.luogu.org/problemnew/show/2617 给定一个序列a[1].a[2].....a[N],完成M个操作,操作有两种: [1]Q i j ...
- Poj3683:Priest John's Busiest Day
题意 n对夫妻要结婚,第i对夫妻结婚的婚礼持续时间为[Si, Ti],他们会举行一个仪式,仪式时间为Di,这个仪式只能举行在开头或者结尾举行,要么[Si, Si+Di],要么[Ti-Di, Ti],然 ...
- 深度剖析HashMap的数据存储实现原理(看完必懂篇)
深度剖析HashMap的数据存储实现原理(看完必懂篇) 具体的原理分析可以参考一下两篇文章,有透彻的分析! 参考资料: 1. https://www.jianshu.com/p/17177c12f84 ...
- js文本框字符数输入限制
我们常常在前台页面做一些文本输入长度的验证,为什么呢?因为数据库字段设置了大小,如果不限制输入长度,那么写入库时就会引发字符串截断异常.今天就给大家分享一个jquery插件来解决这一问题. (func ...