[英]JPA Entity issue with ID
我正在使用JPA構建一個應用程序,我想要一個具有屬性ID的父實體“ BaseEntity”,然后其余實體擴展該實體,然后擁有自己的屬性。 父類中的字段ID受保護。 但是,當我啟動服務器時,出現以下錯誤:
原因:org.hibernate.AnnotationException:未為實體指定標識符:com.fgonzalez.domainmodel.User
當然,如果我將id字段放在類User中,則可以正常工作,但這不是我想要的。 奇怪的是,如果我將xml文件用於休眠映射而不是JPA,則可以正常工作,但不適用於JPA。 知道哪里可能是問題嗎? 附上代碼:
基礎實體:
public class BaseEntity implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Column(name="id")
protected Long id;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
和用戶實體:
@Entity
@Table(name="users")
public class User extends BaseEntity{
/**
*
*/
private static final long serialVersionUID = 1L;
/**
*
*/
@Column(name="EMAIL",nullable=false,length=50,insertable=true,updatable=true)
private String email;
@Column(name="PASSWORD",nullable=false,length=50,insertable=true,updatable=true)
private String password;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email=email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
先感謝您!!
您不能以這種方式這樣做:BaseEntity不是@Entity,因此甚至不應處理@Id。
如果Hibernate確實在使用xml時進行了處理,那可能是不可移植的特性。
您可以實現一些實體層次結構,但是在這種情況下我不會這樣做。 您只能擴展一次,這看起來並不像真正的層次結構:每個類都只有一個根?
您可以在此處找到有關實體繼承的更多信息: http : //docs.oracle.com/javaee/6/tutorial/doc/bnbqn.html
您可以使用合成代替繼承。 在這種情況下,只需使用@Embeddable注釋User類(不是@Entity),並在using類上使用@EmbeddedId注釋字段。
仍然,我不會這樣做:看起來更干了,但是它沒有更多的好處,那就是用別的東西替換String到處都只是為了不重復自己(無論如何你都會這樣做)。
我只有一個@Id Long id; 每個實體中的字段,將它們從層次結構地獄中釋放出來。 它看起來更像樣板,但從長遠來看將更加容易,沒有明顯的缺點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.