有两种方法来map composite key. 第一种用@IdClass第二种用@Embeddable,参考链接: http://stackoverflow.com/questions/3585034/how-to-map-a-composite-key-with-hibernate

一. @IdClass方法

1. Bean

package locationService.beans;

import java.io.Serializable;

import javax.persistence.*;

@Entity
@Table(name = "entity_to_entity")
@IdClass(EntityToEntityPk.class)
public class EntityToEntity implements Serializable { private static final long serialVersionUID = 11L;
private int parentId;
private int childId; @Id
@Column(name="parent_id")
public int getParentId() {
return parentId;
}
public void setParentId(int parentId) {
this.parentId = parentId;
} @Id
@Column(name="child_id")
public int getChildId() {
return childId;
}
public void setChildId(int childId) {
this.childId = childId;
} @Override
public String toString() {
return "parentId is " + parentId + ", childId is " + childId;
} } class EntityToEntityPk implements Serializable {
private static final long serialVersionUID = 12L;
protected Integer parentId;
protected Integer childId; public EntityToEntityPk() {} public EntityToEntityPk(Integer parentId, Integer childId) {
this.parentId = parentId;
this.childId = childId;
} public Integer getParentId() {
return parentId;
}
public void setParentId(int parentId) {
this.parentId = parentId;
} public Integer getChildId() {
return childId;
}
public void setChildId(int childId) {
this.childId = childId;
} @Override
public boolean equals(Object o) {
if(o instanceof EntityToEntityPk){
EntityToEntityPk other = (EntityToEntityPk) o;
return parentId.equals(other.getParentId()) && childId.equals(other.getChildId());
} return false;
} @Override
public int hashCode() {
return parentId.hashCode() + childId.hashCode();
} }

  

注意equals和hasCode方法是composite key必须要有的

A composite id must implement both methods or the id will not work properly. Hibernate must be able to compare ids. A composite id will most likely use all its id fields in the equals and hashCode methods.

An entity does not need to implement equals and hashCode under some conditions. The persistence context guaranties that an entity with a given id exists only once. You cannot let two objects with the same id become persistent. Assuming that a class Country uses the isocode as ID, the following code will cause a non unique object exception.

参考链接: http://www.laliluna.de/jpa-hibernate-guide/ch06s06.html

2. Unit Test

  @Test
public void testEnityToEntity() {
Session session = Config.getSessionFactory().openSession();
session.beginTransaction(); Query query = session.createQuery("select t.parentId from EntityToEntity t"); @SuppressWarnings("unchecked")
List<Object> entities = query.list();
assertEquals(entities.get(0), 1); session.getTransaction().commit();
session.close();
}

Hibernate composite key的更多相关文章

  1. [转]Support Composite Key in ASP.NET Web API OData

    本文转自:https://code.msdn.microsoft.com/Support-Composite-Key-in-d1d53161 he default EntitySetControlle ...

  2. hibernate映射文件set key one-to-many

    转自:https://www.linuxidc.com/Linux/2013-11/92228.htm 1 hibernate映射文件set key one-to-many的配置. POJOs如下: ...

  3. HIBERNATE - 符合Java习惯的关系数据库持久化(精华篇)

    HIBERNATE - 符合Java习惯的关系数据库持久化      下一页 HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.0.4   目录 前言 1. ...

  4. eclipse中hibernate和mybatis中xml配置文件的没有标签提醒解决方法

    当我们使用eclipse编写Mybatis或hibernate的xml文件时,面对众多标签的配置文件,却没有自动提醒,对于工作和学习都十分不方便. 之所以没有自动提醒,是因为dtd文件没有加载成功. ...

  5. hibernate学习(一)配置,导包

    框架的作用 学过javaWeb基础的已经对web层 jsp  servlet   ,service  层  ,dao层的jdbc .DBUtils 有了很深的了解 并编写代码实现某种功能 为了提高开发 ...

  6. 5 -- Hibernate的基本用法 --5 3 改变持久对象状态的方法

    1. 持久化实体 Serializable save(Object obj) : 将obj对象变为持久化状态,该对象的属性将被保存到数据库. void persist(Object obj) : 将o ...

  7. Hibernate的dtd文件和properties文件

    hibernate-configuration-3.0.dtd <!-- Hibernate file-based configuration document. <!DOCTYPE hi ...

  8. 关于Hibernate的Dialect

    org.hibernate HibernateException Dialect must be explicitly set :***  使用Hibernate,有时候会遇到类似上面的异常.  使用 ...

  9. Hibernate的集合映射(Set、List、Array、Map、Bag)

    POJOs如下: Customer类------>customer表   Order类对应---------->orders表  customer(1)<-------------- ...

随机推荐

  1. swfobject.js加载swf,关于是否加加载完成;

    这几个帖子可以参考下 http://bbs.9ria.com/forum.php?mod=viewthread&page=1&tid=38913 http://bbs.9ria.com ...

  2. BZOJ2157 旅行 模拟

    题目内容: Ray 乐忠于旅游,这次他来到了T 城.T 城是一个水上城市,一共有 N 个景点,有些景点之间会用一座桥连接.为了方便游客到达每个景点但又为了节约成本,T 城的任意两个景点之间有且只有一条 ...

  3. 苹果新手MacBook 目录认识

    最近,开发平台从windows转型到mac. 刚开始还真不适应 不过使用了几天之后 还是很不错的. 那么我们来认识一下目录,用过linux的应该很好适应unix的mac MAC是Unix系统 和Win ...

  4. mpusher 源码编译 for windows X64

    mpusher 源码编译 for windows X64 对于java我是小白,通过一步步的摸索,将经验总结下来,给更多码友提供入门的帮助.一个人的摸索是很困难的,本教程感谢 [MPush开源消息推送 ...

  5. 用 js 的 selection range 操作选择区域内容和图片

    原创文章,转载请注明出处并保留地址.原文地址:http://www.cnblogs.com/muge10/p/6723894.html 最近在做编辑器相关的东西,遇到一个需求,用户在编辑器中插入或者粘 ...

  6. 剑指Offer面试题1

    面试题1: 题目描述: 如下为类型CMyString的声明,请为该类型添加赋值运算符函数. class CMyString { public: CMyString(char* pData = NULL ...

  7. React-Native 之 redux 与 react-redux

    前言 本文 有配套视频,可以酌情观看. 文中内容因各人理解不同,可能会有所偏差,欢迎朋友们联系我讨论. 文中所有内容仅供学习交流之用,不可用于商业用途,如因此引起的相关法律法规责任,与我无关,如文中内 ...

  8. 解析http协议的url

    package util; import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamRea ...

  9. win7下安装memcached出现failed to install service or service already installed解决办法

    安装memcached时总是提示“failed to install service or service already installed”,开始以为是版本问题,就下了好几个不同版本,可还是老问题 ...

  10. poj1990树状数组

    Every year, Farmer John's N (1 <= N <= 20,000) cows attend "MooFest",a social gather ...