`

Hibernate注解: 联合主键:@IdClass vs @EmbeddedId

    博客分类:
  • J2EE
阅读更多
Hibernate Annotations -> 2.2.6. Mapping composite primary keys and foreign keys to composite primary keys:
http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#d0e2177
引用
Composite primary keys use a embedded class as the primary key representation, so you'd use the @Id and @Embeddable annotations. Alternatively, you can use the @EmbeddedId annotation. Note that the dependent class has to be serializable and implements equals()/hashCode(). You can also use @IdClass.
@Entity
public class RegionalArticle implements Serializable {

    @Id
    public RegionalArticlePk getPk() { ... }
}

@Embeddable
public class RegionalArticlePk implements Serializable { ... }       
or alternatively
@Entity
public class RegionalArticle implements Serializable {

    @EmbeddedId
    public RegionalArticlePk getPk() { ... }
}

public class RegionalArticlePk implements Serializable { ... }

与这段摘录呼应的一篇文章:
http://blog.csdn.net/zzh87615/article/details/6083754
引用
hibernate的annotation的文档中提供了三种方法
  1 将组件类注解为@Embeddable,并将组件的属性注解为@Id
  2 将组件的属性注解为@EmbeddedId (方便)
  3 将类注解为@IdClass,并将该实体中所有属于主键的属性都注解为@Id(符合编程习惯)
主键类需要序列化(考虑到可能会将数据读写到虚拟内存中),需要重写hashcode()和equals()方法,因为要对联合主键进行比较.



Hibernate Annotation 联合主键三种写法的例子:
http://laodaobazi.iteye.com/blog/903236



Which anotation should I use: @IdClass or @EmbeddedId:
http://stackoverflow.com/questions/212350/which-anotation-should-i-use-idclass-or-embeddedid

Compound Primary Keys with Hibernate and JPA Annotations:
http://jpa.ezhibernate.com/Javacode/learn.jsp?tutorial=15usingcompoundprimarykeys

@IdClass and @EmbeddedId:
http://www.coderanch.com/t/452567/ORM/java/IdClass-EmbeddedId




遇到的一个bug:使用IdClass,居然不认@Column:
https://hibernate.onjira.com//browse/HHH-4256
分享到:
评论
2 楼 lg_asus 2011-11-14  
解决了, 原来主键类还要再把联合主键定义下~~~

感觉有点繁琐,但确实符合编程习惯~
1 楼 lg_asus 2011-11-11  
多谢~ 半天没解决好

将类注解为@IdClass,并将该实体中所有属于主键的属性都注解为@Id(符合编程习惯)
:是将RegionalArticle  注解为@IdClass(RegionalArticlePK.class) ,然后把RegionalArticlePK中的那些属性注解为@Id吗?结果不行。

希望能解释一下~  多谢

相关推荐

    Hibernate注解映射联合主键

    同时,需要在主类上添加`@IdClass`注解,指定联合主键的类。这种方式要求主类包含联合主键类中的所有字段,且每个字段都需要对应联合主键类中的相应字段。联合主键类同样需要实现`Serializable`接口并重写`equals()`...

    java hibernate使用注解来定义联合主键

    本文将详细介绍如何使用Hibernate注解来定义联合主键。 首先,我们需要了解联合主键的定义方式。在Hibernate API中,有三种方法来定义联合主键: 1. 使用`@Embeddable`注解定义一个独立的主键类,然后将这个类的...

    hibernate注解详解

    `@Id`注解标识类中的一个字段作为主键,对应数据库表的主键字段: ```java @Entity public class User { @Id private Long id; // ... } ``` 4. **生成主键策略注解(@GeneratedValue)** 对于自增主键,...

    Hibernate联合主键的例子

    在Hibernate中,我们可以使用`@Embeddable`和`@EmbeddedId`注解来定义和使用联合主键。 1. **创建联合主键类:** 在MyEclipse中,我们首先创建一个Java类来表示联合主键。这个类需要被标记为`@Embeddable`,并包含...

    hibernate 中文注解

    - **映射复合主键与外键:** 复合主键通过`@IdClass`或`@EmbeddedId`注解实现。 - **映射二级表(secondary tables):** 使用`@SecondaryTables`注解来映射多个表。 #### 四、映射查询 - **映射EJBQL/HQL查询:** ...

    hibernate注解学习笔记

    ### Hibernate注解学习笔记 #### 一、简介与概述 Hibernate是Java领域内最流行的ORM(Object Relational Mapping)框架之一,它通过提供强大的映射工具和服务,将面向对象的数据模型(即Java类)与传统的关系型...

    hibernate复合主键设置

    总结,复合主键在Hibernate中是通过`@Embeddable`和`@EmbeddedId`注解来实现的,它允许我们在多字段的唯一标识场景下有效地管理数据。通过理解和正确配置复合主键,能够使我们的数据模型更符合实际业务需求,提高...

    hibernate复合主键配置和使用

    在Hibernate中,我们可以通过`@Embeddable`和`@EmbeddedId`注解来实现复合主键的配置。 1. 创建复合主键类 首先,我们需要创建一个表示复合主键的类,该类需要被`@Embeddable`注解标记。例如,假设我们有用户地址...

    Toplink_JPA注解参考

    联合主键注解 (@EmbeddedId)** 对于复合主键,可以使用@EmbeddedId注解配合一个嵌入式类来表示。例如: ```java @Embeddable public class OrderId { private String orderId; private int customerId; } @...

    hibernate 无主键表映射

    在Hibernate中,无主键表映射通常通过`@Embeddable`和`@EmbeddedId`注解来实现。`@Embeddable`注解用于定义一个包含复合主键字段的类,而`@EmbeddedId`注解则用在实体类上,指定这个复合主键类。 以下是一个简单的...

    Hibernate复合主键.

    在Hibernate中,我们可以使用`@IdClass`或`@EmbeddedId`注解来处理复合主键。 1. 使用@IdClass `@IdClass`注解用于指定一个单独的类作为复合主键的载体。这个类通常包含与复合主键相关的属性,并且需要实现`java....

    最全的Hibernate Annotation API文档

    如果需要复合主键,可以使用`@IdClass`或`@EmbeddedId`。 四、字段映射(Columns) 字段与数据库列的映射通过`@Column`注解实现,如指定列名、长度、是否可为空等: ```java @Entity public class User { @Id ...

    Hibernate教程08_关系映射之联合主键

    在Hibernate中,实现联合主键可以通过使用`@Embeddable`和`@EmbeddedId`注解。首先,我们需要创建一个包含所有主键字段的类,并使用`@Embeddable`标记。这个类通常会作为其他实体类的属性,用`@EmbeddedId`注解。...

    Hibernate一对一单向外键关联 (联合主键annotation)

    本篇将详细讲解如何使用Hibernate进行一对一单向外键关联,并且该关联涉及到联合主键的注解配置。 首先,一对一关联可以分为两种类型:单向和双向。在单向一对一关联中,只有一个实体知道另一个实体的存在,而另一...

    hibernate复合主键映射

    在Hibernate中,我们可以通过实现`Serializable`接口并使用`@Embeddable`和`@EmbeddedId`注解来定义和管理复合主键。 首先,我们需要创建一个代表复合主键的类。例如,对于订单明细表,我们可以创建一个名为`...

    hibernate _annotation 注解编程

    - **复合主键映射**:使用 `@EmbeddedId` 或 `@IdClass` 来映射复合主键。 - **次级表映射**:使用 `@SecondaryTable` 注解来映射实体与次级表的关系。 - **实体缓存**:使用 `@Cacheable` 和 `@Cache(usage = ...

    hibernate 注解 英文版的

    @IdClass(CompositeKey.class) public class EntityWithCompositeKey { @Id private Long id1; @Id private Long id2; ... } ``` - **3.2.7 映射次级表** 多个表映射到单个实体上。 ```java @Entity ...

    hibernate教程

    本文档主要介绍了使用Hibernate进行注解式开发的方法,并且针对Hibernate的基本使用及其配置进行了详尽的解释。Hibernate作为一个流行的Java持久层框架,提供了对象关系映射(ORM)的功能,使得Java应用程序能够更加...

    hibernate3 注释生成复合主键或者嵌入式主键的方法及实例.doc

    这篇文档将介绍如何使用Hibernate注解来生成复合主键或嵌入式主键。 复合主键(Composite Key)是指由两个或更多个列共同构成的唯一标识,而嵌入式主键(Embedded Key)则是将主键字段嵌入到实体类内部。在不使用...

    hibernate_Annotations

    - **复合主键映射**:对于具有复合主键的实体,可以使用`@EmbeddedId`或`@IdClass`注解。 - **二级表映射**:当需要将实体的一部分属性存储在另一个表时,可以使用`@SecondaryTable`注解。 ##### 3.3 查询映射 ...

Global site tag (gtag.js) - Google Analytics