到可嵌入类的外键映射

问题描述 投票:0回答:1

我正在使用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)
java hibernate hibernate-mapping
1个回答
1
投票

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

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

@JoinColumns({
  @JoinColumn(name = "id", insertable = false, updatable = false),
  @JoinColumn(name = "type", insertable = false, updatable = false)
})
© www.soinside.com 2019 - 2024. All rights reserved.