java - 外键映射到 Embeddable 类

标签 java hibernate hibernate-mapping

我正在使用 Hibernate 将 Entity1 连接到 Entity2,其中 Entity2 具有复合主键。

Entity2 包含 2 列 idtype

public class Entity2 {
  @EmbeddedId
  private Entity2PK id;
}
@Embeddable
public class Entity2PK implements Serializable {
  @Column(name = "id")
  private String id;

  @Column(name = "type")
  private String type;
}

Entity1 包含 2 列 identity_2_id(外键引用 Entity2)

public class Entity1 {
  @Id
  @Column(name = "id", updatable = false, nullable = false)
  private String id;

  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name="entity_2_id")
  private Entity2 entity2;
}

因此所有调用都失败。有人有解决办法吗?

错误消息:

org.hibernate.AnnotationException: A Foreign key refering Entity2 from Entity1 has the wrong number of column. should be 4
    at org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:646)
    at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:102)
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processEndOfQueue(InFlightMetadataCollectorImpl.java:1814)
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processFkSecondPassesInOrder(InFlightMetadataCollectorImpl.java:1758)
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1646)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:286)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:83)
    at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:473)
    at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:84)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:689)

最佳答案

您似乎与该用户有同样的问题:AnnotationException: A Foreign key refering has the wrong number of column. should be 2

Entity1 无法将关系存储在单个列中,因为 Entity2 的 id 有 2 列。您可以使用 JoinColumns 而不是 JoinColumn 来解决此问题。

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
  @JoinColumn(name = "entity2_id", insertable = false, updatable = false),
  @JoinColumn(name = "entity2_type", insertable = false, updatable = false)
})
private Entity2 entity2;

关于java - 外键映射到 Embeddable 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59820972/

相关文章:

java - Libgdx:不支持的格式组合

java - 是否也可以在没有 Hibernate 的情况下访问 Hibernate 管理的数据库?

java - 如何在 Hibernate 和 Oracle 中使用命名查询将字符串作为数字进行搜索?

java - 在 Hibernate 中使用注释映射坐标的 Hashmap

java - Java 服务器 : BKS not found 上的 KeyStore 错误

java - 如何用Java同时从多个移动传感器收集数据?

java - 在安装程序未安装 jdk/jre 的 Windows 操作系统上启动 jarsigner.exe

java - Quarkus、Hibernate ORM 和 REST - RESTEASY008200 : JSON Binding deserialization error:

java - JdbcSQLIntegrityConstraintViolationException : NULL not allowed for column

java - 无法将项目列表发送到后端以从列表中删除