問題
在我目前的項目中,我得到這個AnnotationException
:Hibernate並不在吸氣拿起@Id註釋
org.hibernate.AnnotationException:沒有爲實體指定的標識符:my.package.EntityClass
有缺陷的代碼
的問題是由@Id
註釋,這是我從移動引起的現場吸氣劑:
@Entity
@Table(name = "MY_TABLE")
public class EntityClass extends BaseEntityClass {
private long id;
@Override
public void setId(long id) {
this.id = id;
}
@Override
@Id
@SequenceGenerator(name = "FOOBAR_GENERATOR", sequenceName = "SEQ_MY_TABLE", allocationSize = 1, initialValue = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "FOOBAR_GENERATOR")
public long getId() {
return this.id;
}
}
工作守則
當我註釋id
屬性相反,它工作正常:
@Entity
@Table(name = "MY_TABLE")
public class EntityClass extends BaseEntityClass {
@Id
@SequenceGenerator(name = "FOOBAR_GENERATOR", sequenceName = "SEQ_MY_TABLE", allocationSize = 1, initialValue = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "FOOBAR_GENERATOR")
private long id;
@Override
public void setId(long id) {
this.id = id;
}
@Override
public long getId() {
return this.id;
}
}
參考文檔
默認情況下,類層次結構的訪問類型由@Id或@EmbeddedId註釋的位置定義。如果這些註釋位於一個字段上,那麼只有字段被認爲是持久性的,並且狀態通過該字段被訪問。如果註釋位於getter上,那麼只有getter被認爲是持久性的,並且通過getter/setter來訪問狀態。這在實踐中效果很好,並且是推薦的方法。
問題
我班有額外的屬性,其中我想註釋干將。所以我需要將@Id
註釋也放在getter上。
此前在其他項目中工作正常,但此時Hibernate似乎沒有拿起實體的標識符,當getter註釋。
是否有任何額外的配置屬性,我必須改變?
或者在Hibernate版本之間做了這種行爲改變?
是該實體上唯一的字段?如果有其他人,他們是否也有獲得者的註釋? –
正如我的問題所提到的,有更多的領域,並最終,我想在獲得者的所有註釋。但是這並不起作用,除非Hibernate在getter處拾取「@ Id」標註。 – user1438038
請問您可以發佈'BaseEntityClass'類的實現嗎? –