2014-01-27 29 views
0

我有一個父類和一個子類。當我跑我得到下面的錯誤應用:JPA,CLASS的元數據錯誤:多於一個主鍵字段

Error in meta-data for com.twitterjaya.model.HistoryDeviceJPA: More than one primary key field. 

我不知道爲什麼它說我定義了多個主鍵。任何建議,將不勝感激。

@Entity(name = "HistoryJPA") 
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
@DiscriminatorValue("HistoryJPA") 
public class HistoryJPA { 

    @Id 
    String pageAddress; 
    String domain; 
    String pageTitle; 
    long pageVisits; 

    @Override 
    public boolean equals(Object o) { 
     if (this == o) return true; 
     if (o == null || getClass() != o.getClass()) return false; 

     HistoryJPA that = (HistoryJPA) o; 

     if (!pageAddress.equals(that.pageAddress)) return false; 

     return true; 
    } 

    @Override 
    public int hashCode() { 
     return pageAddress.hashCode(); 
    } 

    @Override 
    public String toString() { 
     return "HistoryJPA{" + 
       "pageAddress='" + pageAddress + '\'' + 
       ", domain='" + domain + '\'' + 
       ", pageTitle='" + pageTitle + '\'' + 
       ", pageVisits=" + pageVisits + 
       '}'; 
    } 

    public String getPageAddress() { 
     return pageAddress; 
    } 

    public void setPageAddress(String pageAddress) { 
     this.pageAddress = pageAddress; 
    } 

    public String getDomain() { 
     return domain; 
    } 

    public void setDomain(String domain) { 
     this.domain = domain; 
    } 

    public String getPageTitle() { 
     return pageTitle; 
    } 

    public void setPageTitle(String pageTitle) { 
     this.pageTitle = pageTitle; 
    } 

    public long getPageVisits() { 
     return pageVisits; 
    } 

    public void setPageVisits(long pageVisits) { 
     this.pageVisits = pageVisits; 
    } 
} 

和子類:

@Entity(name = "HistoryDeviceJPA") 
@DiscriminatorValue("HistoryDeviceJPA") 
public class HistoryDeviceJPA extends HistoryJPA { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    private String userUUID; 

    @Override 
    public boolean equals(Object o) { 
     if (this == o) return true; 
     if (o == null || getClass() != o.getClass()) return false; 
     if (!super.equals(o)) return false; 

     HistoryDeviceJPA that = (HistoryDeviceJPA) o; 

     if (!id.equals(that.id)) return false; 
     if (!userUUID.equals(that.userUUID)) return false; 

     return true; 
    } 

    @Override 
    public int hashCode() { 
     int result = super.hashCode(); 
     result = 31 * result + id.hashCode(); 
     result = 31 * result + userUUID.hashCode(); 
     return result; 
    } 

    @Override 
    public String toString() { 
     return "HistoryDeviceJPA{" + 
       "id=" + id + 
       ", userUUID='" + userUUID + '\'' + 
       '}'; 
    } 

    public String getUserUUID() { 
     return userUUID; 
    } 

    public void setUserUUID(String userUUID) { 
     this.userUUID = userUUID; 
    } 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 
} 

回答

1

正如錯誤消息解釋,你有兩個主鍵(用@Id註釋):

  • 之一HistoryJPA現場pageAddress
  • 一個在HistoryDeviceJPA場上id

您應該擺脫其中一個,或根據您的需要創建一個composite primary key

+0

謝謝,我發現這個文檔也很有用:http://en.wikibooks.org/wiki/Java_Persistence/Inheritance – Hesam

相關問題