簡體   English   中英

ID的JPA實體問題

[英]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; 每個實體中的字段,將它們從層次結構地獄中釋放出來。 它看起來更像樣板,但從長遠來看將更加容易,沒有明顯的缺點。

如果要在JPA中實現繼承,則不要像在Java中那樣做。 JPA有自己的實施策略。 在這里看看然后選擇最適合您的需求

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM