《Hibernate学习笔记七》一对一联合主键的关联
来源:互联网 发布:gta5捏脸数据女日本 编辑:程序博客网 时间:2024/06/05 11:49
《Hibernate学习笔记七》一对一联合主键的关联
前面我们讲解了一对一外键关联和一对一主键的关联,这篇博文介绍下联合主键的关联关系。
先回顾下联合主键,可以参考以前写的这篇博文:http://blog.csdn.net/u010412719/article/details/51275744
联合主键的关联
假设有Husband实体类和Wife实体类,Husband类中的主键为id,而 Wife实体类中的主键由id 和name联合主导。
先看Wife实体类
联合主键的映射这里采用第三种方法:@IdClass类做。其中,主键类WifePK要继承Serialable接口,以及要重写equals、hashCode方法。
代码如下:
@Entity @IdClass(WifePK.class) public class Wife { private int id; private String name; private int age; @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; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } package com.hibernate.model; 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; } @Override public int hashCode() { return this.name.hashCode(); } @Override public boolean equals(Object obj) { if (obj instanceof WifePK) { WifePK pk = (WifePK) obj; if(this.id==pk.getId()&&this.name.equals(pk.getName())){ return true; } } return false; } }
Husband类
在单个主键中,我们一对一采用的注解为:@JoinColumn(name=”wifeId”)
现在wife中有两个主键,应该怎么办呢??
方法如下:
@OneToOne @JoinColumns( { @JoinColumn(name="wifeId",referencedColumnName="id"), @JoinColumn(name="wifeName",referencedColumnName="name") } )
Husband类详细代码如下:
@Entity public class Husband { private int id; private String name; private Wife wife; @Id @GeneratedValue public int getId() { return id; } @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; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
测试类代码如下:
测试代码中主要借用了SchemaExport来将SQL语句输出到数据库中。
public class Test { @Test public void testSchema(){ ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build(); Metadata metadata = new MetadataSources(serviceRegistry).buildMetadata(); SchemaExport schemaExport = new SchemaExport(); schemaExport.create(EnumSet.of(TargetType.DATABASE), metadata); } }
执行结果如下:
从结果可以看出,这样就建立了一个一对一的联合主键之间的关联。
小结
上面主要介绍了一对一联合主键的关联关系的Annotation的实现,而关于.xml文件的实现由于相当繁琐,这里不再进行介绍。
0 0
- 《Hibernate学习笔记七》一对一联合主键的关联
- 《Hibernate学习笔记七》一对一联合主键的关联
- 【Hibernate】--一对一关联、联合主键
- hibernate--一对一联合主键外键关联
- hibernate笔记-009-联合主键一对一映射
- Hibernate学习笔记_08_一对一单向、双向主键关联
- Hibernate关系映射(5)_一对一单向联合主键关联
- hibernate一对一单向外键关联_Annotation_联合主键
- Hibernate一对一主键关联
- hibernate一对一主键关联
- Hibernate 一对一共享主键关联的例子
- hibernte学习笔记【一对一主键关联映射】
- hibernate联合主键关联
- Hibernate 一对一主键关联实例
- Hibernate 一对一主键单向关联
- Hibernate 一对一主键双向关联
- Hibernate一对一关联(共享主键)
- Hibernate 一对一主键单向关联
- gcc --help
- HDU 1753 大明A+B -- java大法好
- 从快速排序展开的
- PHP新手如何提高代码质量
- UITextView文字上方一段空白的解决方法
- 《Hibernate学习笔记七》一对一联合主键的关联
- viewController和resignFirstResponder的情丝
- 连续子数组求和
- Python基础学习总结
- 循环移位问题
- HDU 1042 N! -- 求阶乘 java大法好
- Left padding a String with Zeros
- Kafka文件存储机制那些事
- java锁的种类以及辨析