XML配置方法
1.新建一个用于存放联合主键的类.
2.配置映射文件
//新增存放联合主键的类.
//需要实现序列化接口,覆盖hashCode和equals方法
package com.meiyoudao.domain;
import java.io.Serializable;
/**
*
* @author meiyoudao
*
*/
public class PersonPK implements Serializable{
private String name;
private int id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
//需要覆盖hashCode 和 equals方法
@Override
public int hashCode() {
StringBuffer strb = new StringBuffer();
//返回联合主键的hashcode码
//在map数组中能区分
return strb.append(id).append(name).hashCode();
}
@Override
public boolean equals(Object obj) {
if(obj instanceof PersonPK){
PersonPK o = (PersonPK)obj;
if(o.id == this.id && o.name.equals(this.name)){
return true;
}
}
return false;
}
}
<?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.meiyoudao.domain">
<class name="Person">
<composite-id name="personPK" class="PersonPK">
<key-property name="id"></key-property>
<key-property name="name"></key-property>
</composite-id>
<property name="weight"/>
</class>
</hibernate-mapping>
Annotation配置的第一种方法
1.新建一个存放主键的类.并声明这个类为@Embeddable
2.在domain类中的get存放主键类的方法上,注解为@Id
package com.meiyoudao.domain;
import java.io.Serializable;
import javax.persistence.Embeddable;
/**
*
* @author meiyoudao
*
*/
@Embeddable//可以被嵌入的
public class PersonPK implements Serializable{
private String name;
private int id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
//需要覆盖hashCode 和 equals方法
@Override
public int hashCode() {
StringBuffer strb = new StringBuffer();
//返回联合主键的hashcode码
//在map数组中能区分
return strb.append(id).append(name).hashCode();
}
@Override
public boolean equals(Object obj) {
if(obj instanceof PersonPK){
PersonPK o = (PersonPK)obj;
if(o.id == this.id && o.name.equals(this.name)){
return true;
}
}
return false;
}
}
package com.meiyoudao.domain;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.TableGenerator;
@Entity
public class PersonAnno {
private String weight;
private PersonPK personPK;
@Id
public PersonPK getPersonPK() {
return personPK;
}
public void setPersonPK(PersonPK personPK) {
this.personPK = personPK;
}
public String getWeight() {
return weight;
}
public void setWeight(String weight) {
this.weight = weight;
}
}
Annotation配置的第二种方法
在domain类中的get存放主键类的方法上,注解为@EmbeddedId
package com.meiyoudao.domain;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.TableGenerator;
@Entity
public class PersonAnno {
private String weight;
private PersonPK personPK;
@EmbeddedId
public PersonPK getPersonPK() {
return personPK;
}
public void setPersonPK(PersonPK personPK) {
this.personPK = personPK;
}
public String getWeight() {
return weight;
}
public void setWeight(String weight) {
this.weight = weight;
}
}
Annotation配置的第三种方法(最适合开发习惯)
1.新建一个存放主键的类
2.在domain类中的主键get方法上,注解为Id(有几个注解几个)
3.注解这个类为@IdClass(com.meiyoudao.domain.PersonPK.class)指定主键类
package com.meiyoudao.domain;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
@Entity
@IdClass(com.meiyoudao.domain.PersonPK.class)
public class PersonAnno {
private int id;
private String name;
private String weight;
@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 String getWeight() {
return weight;
}
public void setWeight(String weight) {
this.weight = weight;
}
}
分享到:
相关推荐
在探讨Hibernate中联合主键的使用时,我们首先需要理解什么是联合主键以及它在Hibernate框架中的实现方式。联合主键(Composite Primary Key),是指在数据库表中使用两个或多个字段共同作为主键来唯一标识每一行...
### JPA注解实现联合主键 在关系型数据库中,单个字段作为主键的情况较为常见,但在某些场景下,我们需要使用多个字段共同作为主键来唯一标识表中的每一条记录,这就是所谓的“联合主键”。而在Java持久化框架...
在Java的持久化框架Hibernate中,联合主键(Composite Key)是一种特殊的数据模型设计,用于处理具有多个字段作为主键的实体。联合主键通常在数据表中的某些列共同决定了唯一标识的情况出现。在Hibernate中,有三种...
**JPA 联合主键详解** 在Java Persistence API(JPA)中,主键是用于唯一标识数据库表中每一行记录的关键字段。在某些情况下,一个实体可能需要多个字段来唯一标识其实例,这时就需要使用联合主键。本篇文章将深入...
在Java持久化框架Hibernate中,联合主键(Composite Key)是一种特殊的数据结构,用于标识数据库表中的一条记录。与单个字段作为主键不同,联合主键由两个或更多个字段共同组成,形成一个唯一的标识。在本教程中,...
使用@IdClass创建联合主键,并实现外部关联 在 Java Persistence API(JPA)中,联合主键是指由多个字段组成的主键,可以使用@IdClass注解来实现。在本文中,我们将介绍如何使用@IdClass创建联合主键,并实现外部...
本教程将聚焦于JPA中的一个关键概念——联合主键(Composite Key),这是处理多字段主键的一种方式。 联合主键是指在数据库表中,由两个或多个字段共同构成的唯一标识,这些字段的组合必须是唯一的。在JPA中,我们...
在Java Persistence API (JPA) 中,联合主键(Composite Key)是指由两个或更多个字段共同组成的主键,这与单字段主键(Single Field Primary Key)相对。这种设计模式通常用于那些需要多个属性来唯一标识实体的情况...
在 Hibernate 中,联合主键(Composite Key)是指由两个或多个属性共同构成的主键,这种主键在数据库设计中常见于需要多个字段唯一标识一条记录的情况。在 Hibernate 中设置联合主键通常需要以下几个步骤: 1. **...
**JPA 联合主键详解** 在Java Persistence API(JPA)中,主键是用于唯一标识实体的关键字段。通常,一个实体可能只有一个主键字段,但有些情况下,为了实现唯一标识,可能需要使用两个或多个字段的组合,这就是...
在EOS(Entity Operation System)开发过程中,联合主键(Composite Primary Key)是一个重要的概念,它在数据模型设计中起着至关重要的作用。联合主键是由两个或更多个字段组成的唯一标识符,用于确保数据库表中每...
ORMLite虽然功能强大,但默认并不直接支持联合主键,即由两个或多个字段共同构成唯一标识的主键。在某些情况下,我们可能需要创建这样的表结构,比如在关联多个实体时。本篇将详细介绍如何在Android中利用ORMLite...
在JPA中,**联合主键(Composite Key)** 是指由两个或多个属性共同构成的主键,这与单个属性的简单主键相对。联合主键通常用于那些通过多个字段来唯一标识实体的情况。在关系数据库中,联合主键确保了表中每行数据...
本教程聚焦于“联合主键”这一概念,它在处理复合唯一标识符时非常有用。联合主键(Composite Key)是指由两个或多个字段共同组成的主键,这些字段单独可能不是唯一的,但组合起来确保了数据的唯一性。 在Hibernate...
在某些情况下,一个实体可能需要由多个字段共同构成主键,这时就需要使用联合主键,也就是`JPACompositePK`。这篇博客文章将深入探讨JPA中如何处理复合主键,以及它们在实际开发中的应用。 ### 一、JPA 联合主键...
在Java Hibernate框架中,联合主键(Composite Key)是指由两个或多个属性共同构成的主键,这在处理一些特定的数据模型时非常有用。本文将详细介绍如何使用Hibernate注解来定义联合主键。 首先,我们需要了解联合...
**JPA联合主键详解** 在Java Persistence API (JPA) 中,主键是用于唯一标识实体的关键字段。在很多情况下,一个实体的主键可能不是由单一字段组成,而是由两个或更多个字段共同构成,这样的主键就被称为联合主键...
阅读指南基本概念创建表时定义主键约束修改表时定义主键约束删除主键约束 ...当把联合主键的某一字段删除后,如果剩下的字段构成的主键仍然满足唯一性原则,那么这个联合主键是不正确的。 创建表时定义主键约束
本篇将详细讲解如何使用Hibernate进行一对一单向外键关联,并且该关联涉及到联合主键的注解配置。 首先,一对一关联可以分为两种类型:单向和双向。在单向一对一关联中,只有一个实体知道另一个实体的存在,而另一...
原生的sqoop在迁移联合主键的表至hive时,只能识别一个主键,导致数据覆盖。本资源是把sqoop的源码按照官方推荐的issue解决方案重新编译后的版本。sqoop-1.4.7.bin__hadoop-2.6.0-2020.0508.tar.gz是已完成编译的tar...