当前位置: 首页 > 知识库问答 >
问题:

复合主键JPA表示

冷涵忍
2023-03-14

我很难在Hibernate中映射复合主键连接。下面是我的模式的简化图片。请注意,我不能更改架构。

简化模式

@Entity
@Table(name = "tree")
public class Tree implements Serializable {
   @EmbeddedId
   protected TreePK treePK;

  @OneToOne(mappedBy = "tree")
  private Activity activity;
}
@Embeddable
public class TreePK implements Serializable {
    @Column(name = "id")
    private Integer id;

    //this is a foreign key from the volume table
    @Column(name = "volume_id")
    private Integer volumeId;
}
@Entity
@Table(name = "volume")
public class Volume implements Serializable {
   @Id
   private Integer id;
}
@Entity
@Table(name = "activity")
public class Activity implements Serializable {
   @Id
   private Integer id;

   @JoinColumn(name = "tree_id", referencedColumnName = "id")    
   @OneToOne
   private Tree tree;
}

引用com.corp.activity.tree的referencedColumnNames(id)未映射到单个属性

如何在Hibernate中构建这样的关系?我必须映射到单个属性(id),尽管主键是复合的。

共有1个答案

澹台权
2023-03-14

Eclipselink和Hibernate都不能做到这一点。许多年前,OpenJPA是唯一能够做到这一点的JPA实现程序

 类似资料:
  • 问题内容: 我的JPA模型中有以下类(省略了getters,setters和无关字段): 我需要定义一个类,使得当从所述类生成DDL时,相应的表的主键被由密钥和。我尝试了以下方法: 但这会为表生成以下内容: 请注意,和都是可为空的,当我尝试将DDL加载到SQL Server时会导致以下错误 无法在表“ PRICE”中的可为空的列上定义PRIMARY KEY约束 我不明白为什么这些可以为空,因为在域

  • EmbeddedId或IdClass注释用于表示复合主键。如何在没有(EmbeddedId或IdClass)的情况下使用复合主键? 如果可以在没有(EmbeddedId或IdClass)的情况下使用复合主键,那么如何使用EntityManager.find(Entity Class,Object primaryKey)方法在复合主键(Multiple primaryKey)的情况下查找实体(因为没

  • 当我执行这个查询时,我会得到以下异常

  • 我有一个复合主键,其中一个键为空。实体中必须存在哪些注释,以便我可以使用此类JPA获取数据: 我尝试使用IdClass Annotation和EmbeddedId Annotation,但出现异常: 例如,使用了数据,但在实际项目中使用了类似的数据,因此无法用值替换null。

  • 我有两个表:A和B,都有一个复合主键。表B的PK也是表a主键的外键。 当我试图获取映射表B的类的实例时,我得到了以下异常: org.hibernate.TypeMismatchException 这两个类都位于package:com.cairone.ejemple01.entities 完整的日志输出为: 2016-09-21 12:28:24.505错误8568--[main] O.S.Boot

  • 我有以下表格,如何将它们映射到JPA实体: 事件表与会议表具有一对多的关系。我如何在JPA中映射这种双向关系?