Hibernate教程08_关系映射之联合主键
2013-04-13 15:43
369 查看
本教程每节课都附带源码,强烈大家建议配合源码学习。
本节源码:http://download.csdn.net/detail/e421083458/5253721
联合主键(Husband中存在wife的联合主键)
@JoinColumns
Wife类中建立联合主键,建立方式参考 ID生成策略中的联合主键部分
Husband类中写Wife对象属性,并在其get方法上写@OneToOne即可完成一对一外键映射
若想要指定生成的外键名 则需使用@JoinColumns注解,如下:
@OneToOne
@JoinColumns( { @JoinColumn(name = "wifeid", referencedColumnName = "id"),
@JoinColumn(name = "wifename", referencedColumnName = "name") })
/*@JoinColumns用于在一对一外键关联存在联合主键情况时指定生成的外键字段名称
@JoinColumns的参数为@JoinColumn数组 @JoinColumn内除需指定name属性外还需指定
referencedColumnName属性值 作用是可指定生成的字段名所对应的目标表字段名*/
public Wife getWife() {……}
项目源码:
Husband.java
Wife.java
WifePK.java
测试脚本:
本节源码:http://download.csdn.net/detail/e421083458/5253721
联合主键(Husband中存在wife的联合主键)
@JoinColumns
Wife类中建立联合主键,建立方式参考 ID生成策略中的联合主键部分
Husband类中写Wife对象属性,并在其get方法上写@OneToOne即可完成一对一外键映射
若想要指定生成的外键名 则需使用@JoinColumns注解,如下:
@OneToOne
@JoinColumns( { @JoinColumn(name = "wifeid", referencedColumnName = "id"),
@JoinColumn(name = "wifename", referencedColumnName = "name") })
/*@JoinColumns用于在一对一外键关联存在联合主键情况时指定生成的外键字段名称
@JoinColumns的参数为@JoinColumn数组 @JoinColumn内除需指定name属性外还需指定
referencedColumnName属性值 作用是可指定生成的字段名所对应的目标表字段名*/
public Wife getWife() {……}
项目源码:
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.JoinColumns; import javax.persistence.OneToOne; import javax.persistence.PrimaryKeyJoinColumn; @Entity public 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 @JoinColumns( { @JoinColumn(name="wifeId",referencedColumnName="id"), @JoinColumn(name="wifeName",referencedColumnName="name") } ) public Wife getWife() { return wife; } public void setWife(Wife wife) { this.wife = wife; } }
Wife.java
package com.bjsxt.hibernate; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.IdClass; import javax.persistence.OneToOne; import javax.persistence.PrimaryKeyJoinColumn; @Entity @IdClass(WifePK.class) public class Wife { private int id; private String name; @Id public int getId() { return id; } public void setId(int id) { this.id = id; } @Id public String getName() { return name; } public void setName(String name) { this.name = name; } }
WifePK.java
package com.bjsxt.hibernate; import java.io.Serializable; public class WifePK implements Serializable { private int id; private String name; 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; } }
测试脚本:
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.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(); } public static void main(String args[]){ sf = new AnnotationConfiguration().configure().buildSessionFactory(); 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(); sf.close(); } }
相关文章推荐
- 解决使用Hibernate QBC复合查询含有联合主键映射关系实体的问题
- Hibernate关系映射级别注解(一对一双向外键关联、一对一双向外键联合主键)
- Hibernate关系映射(5)_一对一单向联合主键关联
- Hibernate教程07_关系映射之一对一双向主键关联
- Hibernate 映射视图的联合主键
- Hibernate联合主键映射规则和数据查询原理
- Hibernate教程04_关系映射之一对一单向外键关联
- Hibernate教程09_关系映射之组件映射
- Hibernate 映射视图的联合主键的问题
- hibernate映射文件中的id标签以及联合主键
- hibernate基于注解的联合主键映射
- [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系
- 联合主键用Hibernate注解映射的三种方式
- Hibernate4教程四:关系映射
- hibernate实现非主键映射外键双向多对一关系
- Hibernate笔记③--集合映射、组合映射、联合主键、查询案例
- Hibernate联合主键映射以及组件映射
- Hibernate联合主键映射
- Hibernate映射度联合主键的问题,关于序列化
- Hibernate联合主键映射