【问题标题】:Hibernate entity without PK but has FK没有 PK 但有 FK 的休眠实体
【发布时间】:2016-03-17 13:19:32
【问题描述】:

我遇到了异常:org.hibernate.AnnotationException: No identifier specified for entity

我知道 hibernate 在实体类中必须有 @Id 但在我的表中没有主键只有两个外键。如何映射hibernate实体类而不报错?

例如类。

@Entity
@Table(name="building_block")
public class BuildingBlock implements Serializable {

    private Integer archId;
    private Integer mirrorId; //foreign key to Mirror table
    private Integer makeId; //foreign key to Maker table
    private Integer sweepId;
    private String search;
    private Integer length;
    private Date createDate;

    @Column(name="arch_id")
    public Integer getArchId() {
        return ArchId;
    }
    public void setArchId(Integer ArchId) {
        this.ArchId = ArchId;
    }
    @Column(name="mirror_id")
    public Integer getMirrorId() {
        return mirrorId;
    }
    public void setMirrorId(Integer mirrorId) {
        this.mirrorId = mirrorId;
    }
    @Column(name="make_id")
    public Integer getMakeId() {
        return makeId;
    }
    public void setMakeId(Integer makeId) {
        this.makeId = makeId;
    }

    ...

    @Column(name="create_date")
    public Date getCreateDate() {
        return createDate;
    }
    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }
}

【问题讨论】:

  • 对应的SQL表是什么样的?也就是说,哪些列构成了表的主键(声明的或隐含的)?
  • 虽然在 Hibernate 中添加复合 PK 是完全可能的(请参阅 stackoverflow.com/questions/13936340/…),但我不鼓励这样做,除非您正在处理无法执行任何架构更改的遗留数据库.

标签: java database hibernate jpa


【解决方案1】:

您必须添加主键列并在实体中声明主键。

参考:http://docs.jboss.org/hibernate/core/3.5/reference/en/html/mapping.html#mapping-declaration-id

映射类必须声明数据库的主键列 表

【讨论】:

【解决方案2】:

您可以尝试通过制作复合 id 来使这些外键成为实体的主键。

要了解如何制作复合键,请点击此链接 (How to map a composite key with Hibernate?)

【讨论】:

    【解决方案3】:

    如果您知道一组字段始终可以识别特定记录,则可以将它们组合在一起并告诉 Hibernate 将其用作主键。

    请参阅Using Hibernate Get with Multi-Column Primary Key 了解如何执行此操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-15
      • 1970-01-01
      • 2012-01-09
      • 2019-06-29
      • 2015-01-29
      • 2013-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多