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