hibernate它5.many2one单向
关系数据库表之间的关系:
1 正确 1
1 正确 许多
许多 正确 许多
表间关系设计
基于主键关联
基于外键关联
基于中间表
1 对 1关系实现:
基于主键关联
基于外键关联
基于中间表
1 对 多关系实现:
基于外键关联
基于中间表
多 对 多关系实现:
基于中间表
面向对象实体关系
1 对 1
1 对 多
多 对 多
方向 :
单向、双向
CRUD:
many2one配置:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.demo.model"> <class name="Certificate" table="t_certificate">
<id name="certificateId" column="certificate_id">
<generator class="sequence"><param name="sequence">SEQ_T_CERTIFICATE</param></generator>
</id>
<property name="certificateName" column="certificate_name"/>
<property name="certificateNo" column="certificate_no"/>
<many-to-one name="student" column="student_id"></many-to-one>
</class>
</hibernate-mapping><many-to-one name="student" column="student_id"></many-to-one>增、删、改
@Test
public void addTest() {
Student student = new Student();
student.setStudentName("王五");
student.setAge(35); Certificate certificate1 = new Certificate();
certificate1.setCertificateName("aa");
certificate1.setCertificateNo("3a10001");
certificate1.setStudent(student);
Certificate certificate2 = new Certificate();
certificate2.setCertificateName("bb");
certificate2.setCertificateNo("3a10002");
certificate2.setStudent(student); Session session = null; try {
session = HibernateUtil.openSession();
session.beginTransaction();
// 先保存one,再保存many
session.save(student);
session.save(certificate1);
session.save(certificate2);
session.getTransaction().commit();
} catch (Exception e) {
session.getTransaction().rollback();
e.printStackTrace();
} finally {
HibernateUtil.closeSession(session);
} } @Test
public void deleteTest() {
Student student = new Student();
student.setStudentId(1);
Certificate certificate1 = new Certificate();
certificate1.setCertificateId(1);
Certificate certificate2 = new Certificate();
certificate2.setCertificateId(2);
Session session = null; try {
session = HibernateUtil.openSession();
session.beginTransaction();
session.delete(certificate1);
session.delete(certificate2);
session.delete(student);
session.getTransaction().commit();
} catch (Exception e) {
session.getTransaction().rollback();
e.printStackTrace();
} finally {
HibernateUtil.closeSession(session);
}
} @Test
public void updateTest() {
Student student = new Student();
student.setStudentId(2);
student.setStudentName("赵四");
Certificate certificate1 = new Certificate();
certificate1.setCertificateId(3);
certificate1.setCertificateName("cc");
certificate1.setCertificateNo("s0001");
certificate1.setStudent(student);
Certificate certificate2 = new Certificate();
certificate2.setCertificateId(4);
certificate2.setCertificateName("dd");
certificate2.setCertificateNo("s0002");
certificate2.setStudent(student);
Session session = null; try {
session = HibernateUtil.openSession();
session.beginTransaction();
session.update(certificate1);
session.update(certificate2);
session.update(student);
session.getTransaction().commit();
} catch (Exception e) {
session.getTransaction().rollback();
e.printStackTrace();
} finally {
HibernateUtil.closeSession(session);
}
}getTest:
@Test
public void updateTest() {
Student student = new Student();
student.setStudentId(2);
student.setStudentName("赵四");
Certificate certificate1 = new Certificate();
certificate1.setCertificateId(3);
certificate1.setCertificateName("cc");
certificate1.setCertificateNo("s0001");
certificate1.setStudent(student);
Certificate certificate2 = new Certificate();
certificate2.setCertificateId(4);
certificate2.setCertificateName("dd");
certificate2.setCertificateNo("s0002");
certificate2.setStudent(student);
Session session = null; try {
session = HibernateUtil.openSession();
session.beginTransaction();
session.update(certificate1);
session.update(certificate2);
session.update(student);
session.getTransaction().commit();
} catch (Exception e) {
session.getTransaction().rollback();
e.printStackTrace();
} finally {
HibernateUtil.closeSession(session);
}
}结果:
Hibernate: select certificat0_.certificate_id as certific1_1_0_, certificat0_.certificate_name as certific2_1_0_, certificat0_.certificate_no as certific3_1_0_, certificat0_.student_id as student4_1_0_ from t_certificate certificat0_ where certificat0_.certificate_id=?
3
证书名称:cc
Hibernate: select student0_.student_id as student1_0_0_, student0_.student_name as student2_0_0_, student0_.age as age0_0_ from t_student student0_ where student0_.student_id=? 学员名称:赵四Student(one)对象被延迟载入了,many2one中,get支持延迟载入
loadTest:
@Test
public void loadTest() {
Session session = null;
try {
session = HibernateUtil.openSession();
session.beginTransaction();
Certificate certificate = (Certificate) session.load(
Certificate.class, 3);
System.out.println(certificate.getCertificateId());
System.out.println("证书名称:"+certificate.getCertificateName());
System.out.println("学员名称:"+certificate.getStudent().getStudentName());
session.getTransaction().commit();
} catch (Exception e) {
session.getTransaction().rollback();
e.printStackTrace();
} finally {
HibernateUtil.closeSession(session);
}
}
结果:
3
Hibernate: select certificat0_.certificate_id as certific1_1_0_, certificat0_.certificate_name as certific2_1_0_, certificat0_.certificate_no as certific3_1_0_, certificat0_.student_id as student4_1_0_ from t_certificate certificat0_ where certificat0_.certificate_id=?
证书名称:cc
Hibernate: select student0_.student_id as student1_0_0_, student0_.student_name as student2_0_0_, student0_.age as age0_0_ from t_student student0_ where student0_.student_id=?
学员名称:赵四
many与one都被延迟载入
补充表结构及实体类源代码:
t_student
t_certificate:
Student:
package com.demo.model; import java.io.UnsupportedEncodingException; /**学生信息双向
* @author wobendiankun
*2014-10-19 下午08:54:29
*/
public class Student {
private int studentId ;
private String studentName ;
private int age;
public int getStudentId() {
return studentId;
}
public void setStudentId(int studentId) {
this.studentId = studentId;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
String str="";
if(studentName!=null){
try {
str=new String(studentName.getBytes("UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return "Student [studentId=" + studentId + ", studentName="
+ str + ", age=" + age + "]";
} }
Certificate
package com.demo.model; /**从业资格证书
* @author wobendiankun
*2014-10-25 上午11:43:21
*/
public class Certificate {
/**
* 证书id
*/
private int certificateId ;
/**
* 证书名称
*/
private String certificateName;
/**
*证书编号
*/
private String certificateNo ; private Student student ;
public int getCertificateId() {
return certificateId;
}
public void setCertificateId(int certificateId) {
this.certificateId = certificateId;
}
public String getCertificateName() {
return certificateName;
}
public void setCertificateName(String certificateName) {
this.certificateName = certificateName;
}
public String getCertificateNo() {
return certificateNo;
}
public void setCertificateNo(String certificateNo) {
this.certificateNo = certificateNo;
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
} }
版权声明:本文博客原创文章。博客,未经同意,不得转载。
hibernate它5.many2one单向的更多相关文章
- hibernate它 10.many2many单向
在前文hibernate之5.many2one单向提到多对多关系,表结构设计是基于中间表来实现, 以下以用户与角色(多对多)为例,在Hibernate是怎样操作的 表结构设计: 类图: CRUD; S ...
- hibernate一对一外键单向关联
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...
- hibernate一对一主键单向关联
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...
- Hibernate的关联映射——单向1-N关联
Hibernate的关联映射--单向1-N关联 单向1-N关联的持久化类里需要使用集合属性.因为1的一端需要访问N的一端,而N的一端将以集合(Set)形式表现.从这个意义上来看,1-N(实际上还包括N ...
- Hibernate的关联映射——单向1-1关联
Hibernate的关联映射--单向1-1关联 对于单向的1-1关联关系,需要在持久化类里增加代表关联实体的成员变量,并为该成员变量添加setter方法和getter方法.从持久化类的代码上看,单向1 ...
- Hibernate的关联映射——单向N-1关联
Hibernate的关联映射--单向N-1关联 N-1是非常常见的关联关系,最常见的父子关系也是N-1关联,单向的N-1关联只需从N的一端可以访问1的一端. 为了让两个持久化类能够支持这种关联映射,程 ...
- hibernate之关于一对一单向,双向关联映射
[hibernate]之关于一对一单向,双向关联映射 首先我们来看,Hibernate官方对于一对一单向关联的解释: 基于外键关联的单向一对一关联和单向多对一关联差点儿是一样的. 唯一的不同就是单向一 ...
- 【SSH进阶之路】Hibernate映射——多对一单向关联映射(四)
[SSH进阶之路]Hibernate基本原理(一) ,小编介绍了Hibernate的基本原理以及它的核心,採用对象化的思维操作关系型数据库. [SSH进阶之路]Hibernate搭建开发环境+简单实例 ...
- 【SSH系列】Hibernate映射-- 多对一单向关联映射
在hibernate中非常重要的就是映射,在前面的博文中,小编简单的介绍了基本映射,基本映射是对一个实体进行映射,关联映射就是处理多个实体之间的关系,将关联关系映射到数据库中,所谓的关联关系在对象模型 ...
随机推荐
- tomcat实现多端口、多域名访问
tomcat实现多端口访问 tomcat可以实现:多个端口访问同一个web应用.不同的应用通过不同的域名进行访问. 本文介绍的都是只启动一个tomcat服务的情况下,当然,实现这些功能也可以通过启动多 ...
- BaiduMap_SDK_DEMO_3.0.0_for_Xamarin.Android_by_imknown
2.4.2 已稳定, 同一时候已经放置到分支/Release 2.4.2了. 3.0.0 已开发完毕, 可是不推荐大家用于项目中, 请观望或者自己进一步调试. 个人感觉尽管3.0.0简化了开发, 可是 ...
- PPTP和L2TP的区别
PPTP是点到点的隧道协议,服务器端使用TCP 的1723端口,同时使用GRE协议,加密上使用MPPE.位于NAT后的客户端连接会有问题. L2TP是二层隧道VPN,使用IPsec 进行加密,服务器端 ...
- Java利用httpasyncclient进行异步HTTP请求
Java利用httpasyncclient进行异步HTTP请求 前段时间有个需求在springmvc mapping的url跳转前完成一个统计的业务.显然需要进行异步的处理,不然出错或者异常会影响到后 ...
- Nagios+pnp4nagios+rrdtool 安装配置为nagios添加自定义插件(三)
nagios博大精深,可以以shell.perl等语句为nagios写插件,来满足自己监控的需要.本文写mysql中tps.qps的插件,并把收集到的结果以图形形式展现出来,这样输出的结果就有一定的要 ...
- asp.net用户身份验证时读不到用户信息的问题 您的登录尝试不成功。请重试。 Login控件
原文:asp.net用户身份验证时读不到用户信息的问题 您的登录尝试不成功.请重试. Login控件 现象1.asp.net使用自定义sql server身份验证数据库,在A机器新增用户A,可以登录成 ...
- HDU 1114 Piggy-Bank 全然背包
Piggy-Bank Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit S ...
- mysql如何更新一个表中的某个字段值等于另一个表的某个字段值
表A和表B,现在希望更新A表,当 A.bid = B.id时,a.x = b.x, a.y=b.y,请问mysql中sql语句 update a inner join b on a.bid=b.id ...
- 为什么不要在android或者ios上直连mysql或者sqlserver之类的数据库(跳大神)
很多同学 都有直连这些数据库的想法,假设我说了下面二个问题之后你还想直连,那我也没办法 数据库是一个服务端最重要的部分,也是最脆弱的部分,更是最敏感的部分 假设直连会造成例如以下问题 1.安全问题,你 ...
- 第三章 AOP 基于Schema的AOP
基于Schema定义的切面和前现两种方式定义的切面,内容上都差不多,只是表现形式不一样而已. 3.7.1一般增强的使用 a.目标类 public class Target { public void ...