Hibernate教程07_关系映射之一对一双向主键关联
来源:互联网 发布:有关柳叶图形算法 编辑:程序博客网 时间:2024/05/20 18:18
本教程每节课都附带源码,强烈大家建议配合源码学习。
本节源码:http://download.csdn.net/detail/e421083458/5253718
一对一双向主键关联(不重要)(使用Annotation无外键关联,使用xml后发现两表使用相同主键)
实现方式有两种:
Annotation方式:
@primaryKeyJoinColumn
注:此方式有些小Bug,系统不会自动向表里写入外键关联!
XML方式:
<one-to-one id 使用foreign class和<one-to-one property-ref
项目源码:
Husband.java
package com.bjsxt.hibernate;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.OneToOne;import javax.persistence.PrimaryKeyJoinColumn;@Entitypublic class Husband { private int id; private String name; private Wife wife; @Id @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @OneToOne @PrimaryKeyJoinColumn public Wife getWife() { return wife; } public void setWife(Wife wife) { this.wife = wife; }}
Student.java
package com.bjsxt.hibernate;public class Student { private int id; private String name; private int age; private String sex; private boolean good; private StuIdCard idcard; public StuIdCard getIdcard() { return idcard; } public void setIdcard(StuIdCard idcard) { this.idcard = idcard; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public boolean isGood() { return good; } public void setGood(boolean good) { this.good = good; } }
StuIdCard.java
package com.bjsxt.hibernate;public class StuIdCard { private int id; private String num; private Student student; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getNum() { return num; } public void setNum(String num) { this.num = num; } public Student getStudent() { return student; } public void setStudent(Student student) { this.student = student; }}
Wife.java
package com.bjsxt.hibernate;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.OneToOne;import javax.persistence.PrimaryKeyJoinColumn;@Entitypublic class Wife { private int id; private String name; private Husband husband; @OneToOne @PrimaryKeyJoinColumn public Husband getHusband() { return husband; } public void setHusband(Husband husband) { this.husband = husband; } @Id @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
Student.hbm.xml
<?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> <class name="com.bjsxt.hibernate.Student" table="C_student" dynamic-update="true"> <id name="id"> <generator class="native"></generator> </id> <property name="name"></property> <property name="age" /> <property name="sex" /> <property name="good" type="yes_no"></property> <one-to-one name="idcard" constrained="true"></one-to-one> </class> </hibernate-mapping>
StuIdCard.hbm.xml
<?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> <class name="com.bjsxt.hibernate.StuIdCard"> <id name="id"> <generator class="native"></generator> </id> <property name="num"/> <one-to-one name="student" constrained="true"></one-to-one> </class> </hibernate-mapping>
测试脚本:
package com.bjsxt.hiberante;import java.util.Date;import org.hibernate.Query;import org.hibernate.SessionFactory;import org.hibernate.cfg.AnnotationConfiguration;import org.hibernate.tool.hbm2ddl.SchemaExport;import org.hibernate.Session;import org.junit.AfterClass;import org.junit.BeforeClass;import org.junit.Test;import com.bjsxt.hibernate.Husband;import com.bjsxt.hibernate.StuIdCard;import com.bjsxt.hibernate.Student;import com.bjsxt.hibernate.Wife;public class HibernateQLTest { private static SessionFactory sf; @BeforeClass public static void setUpBeforeClass() throws Exception { System.out.println("BeforeClass"); sf = new AnnotationConfiguration().configure().buildSessionFactory(); } @AfterClass public static void tearDownAfterClass() throws Exception { System.out.println("AfterClass"); sf.close(); } // @Test public void testSchemaExport(){ new SchemaExport(new AnnotationConfiguration().configure()).create(false, true); } @Test public void testOneTOOne_Wife(){ Session session = sf.getCurrentSession(); session.beginTransaction(); Wife wife = new Wife(); wife.setName("wife"); Husband husband = new Husband(); husband.setName("husband"); husband.setWife(wife); session.save(wife); //先保存妻子 session.save(husband); //再保存丈夫 session.getTransaction().commit(); } @Test public void testOneToOne_Stu(){ Session session = sf.getCurrentSession(); session.beginTransaction(); Student stu = new Student(); stu.setName("student"); stu.setAge(20); stu.setGood(false); stu.setSex("man"); StuIdCard idcard = new StuIdCard(); idcard.setStudent(stu); idcard.setNum("什马卡?"); session.save(stu); session.save(idcard); session.getTransaction().commit(); } public static void main(String args[]){ sf = new AnnotationConfiguration().configure().buildSessionFactory(); Session session = sf.getCurrentSession(); session.beginTransaction(); Student stu = new Student(); stu.setName("student"); stu.setAge(20); stu.setGood(false); stu.setSex("man"); StuIdCard idcard = new StuIdCard(); idcard.setStudent(stu); idcard.setNum("什马卡?"); session.save(stu); session.save(idcard); session.getTransaction().commit(); sf.close(); }}
- Hibernate教程07_关系映射之一对一双向主键关联
- Hibernate关系映射(4)_一对一双向主键关联
- hibernate映射关系之一对一双向主键关联
- Hibernate之对象关系映射05一对一双向主键关联
- Hibernate教程06_关系映射之一对一单向主键关联
- Hibernate实体关系映射:双向主键一对一关联
- Hibernate关系映射(3)_一对一单向主键关联
- Hibernate关系映射(5)_一对一单向联合主键关联
- hibernate一对一主键关联映射双向
- Hibernate一对一主键关联映射(双向)
- Hibernate关联之一对一主键双向关联
- hibernate映射关系之一对一单向主键关联
- Hibernate之基于主键映射的一对一关联关系
- Hibernate之对象关系映射02一对一单向主键关联
- Hibernate之对象关系映射04一对一双向关联
- Hibernate之关联关系映射(一对一主键映射和一对一外键映射)
- Hibernate 关联映射之---- 一对一双向映射
- Hibernate关联关系之一对一(主键关联)
- 补间动画基础备忘(3)
- Hibernate教程06_关系映射之一对一单向主键关联
- 杀掉某个会话
- 游标属性SQL%FOUND,SQL%NOTFOUND,SQL%ROWCOUNT
- 配置PL/SQL连接ORACLEn数据库
- Hibernate教程07_关系映射之一对一双向主键关联
- VC6项目升级为VC2005
- Gallery + GridView 实现图片与小圆点同步变化
- Spring配置文件错误
- HDU4006--The kth great number
- opencv-图像轮廓用长方形和圆圈显示
- 广告牌技术:欺骗-圆柱体化广告牌
- struts2校验流程
- 第一次写博客!