Hibernate实体没有PK但有FK

时间:2015-12-11 15:16:41

标签: java database hibernate jpa

我得到例外: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;
    }
}

3 个答案:

答案 0 :(得分:0)

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

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

  

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

答案 1 :(得分:0)

您可以尝试通过创建复合ID来使这些外键成为您实体的主键。

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

答案 2 :(得分:0)

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

有关如何执行此操作,请参阅Using Hibernate Get with Multi-Column Primary Key