java - 在复合键和 @ManyToOne JoinColumns 之间共享列

标签 java hibernate jpa

我遇到了一个问题,我不知道是否可以仅通过使用 hibernate/jpa 注释来解决。问题是我有一个复合键,它与我的外键复合 id 之一具有相同的列,并且我想在表上共享同一列。例如:

@Entity
class Id {
  @Id
  @Column(name = "idPessoa")
  public Integer idShared;
}

@Embeddable
class APK {
  @ManyToOne
  @JoinColumn(name = "idShared")
  public Id idShared;
  public String nKey;
}

@Entity
class A {
  @EmbeddedId
  public APK id;
}

@Embeddable
class BPK {
  @ManyToOne
  @JoinColumn(name = "idShared")
  public Id idShared;
  public Integer nCode;
}

@Entity
class B {
  @EmbeddedId
  public BPK id;

  @ManyToOne
  @JoinColumns({ @JoinColumn(name = "idShared", nullable = false, insertable = false, updatable = false), @JoinColumn(name = "nKey", nullable = false) })
  public A a;
}

问题是我如何在 A 和 B 之间共享 idShared 列并在 @ManyToOne 中将其用作外键?

我已经尝试在 @JoinColumns 中使用名称为 idShared 的 @JoinColumn,但收到一条错误消息,指出我需要使用 insert = false 和 update = false,我已经放入 insertable = false 和 updateable = false,但随后我收到另一个错误,说我无法混合东西。

我找到了一个可能的解决方案,说要使用:

@ManyToOne
@JoinColumnsOrFormulas(value = {
@JoinColumnOrFormula(formula = @JoinFormula(value = "idShared", referencedColumnName = "idShared")),
@JoinColumnOrFormula(column = @JoinColumn(name = "nKey", nullable = false)) })
public A a;

但它给了我错误:

Unable to find column with logical name  in table A

它必须查找的列的“name”属性似乎是空白的。

需要帮助!

最佳答案

请查看Official Java EE 6 Tutorial about composite primary key 。您可以使用 @EmbeddedId @Embeddable 和/或 @IdClass 注释。

例如

// File: APK.java ---------------------
@Embeddable
public class APK implements Serializable {
  public Integer idShared;
  public String nKey;
}

// File: A.java ---------------------    
@Entity
public class A {
  @EmbeddedId public APK id;
}

关于java - 在复合键和 @ManyToOne JoinColumns 之间共享列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17478064/

相关文章:

java - 输出值作为 NULL 返回,而不是存储在数据库表中的值

java - 更改 actionBar 下拉菜单背景颜色

java - OAuth2 : How to generate client id and client secret?

java - Tomcat JMX 连接 - 身份验证失败

spring - liquibase-hibernate5 不适用于 liquibase-maven-plugin

java - org.hibernate.MappingException : Could not determine type for custom object type

java - Spring - 配置 Hibernate Jpa 的问题

java - Hibernate,与已保存和未保存对象的多对多关系

java - 如何在JPA中使用Plural Attributes进行条件查询?

java - 使用多个持久化单元动态处理 EntityManager