創建外鍵複合主鍵這是一個情況下,我想在我的播放項目表示:無法在播放2.0
table clients {
client_id (pk),
description
}
table items {
client_id (fk, pk),
item_id (pk)
}
在「項目」表我想有一個複合主鍵這將包含組合的client_id和item_id。我已閱讀JPA文檔以及該主題上的許多帖子,但所有內容都一次又一次地失敗。這是我嘗試過的許多版本之一 - 最接近JPA文檔。在COM錯誤讀取註解 models.ItemsPK :
@Entity
@Table(name = "items")
public class Items extends Model {
ItemsPK primaryKey;
public Items() {
}
@EmbeddedId
public ItemsPK getPrimaryKey() {
return primaryKey;
}
public void setPrimaryKey(ItemsPK pk) {
primaryKey = pk;
}
}
@Embeddable
public class ItemsPK implements Serializable {
private long itemId;
private Client client;
public ItemsPK() {
}
@Column(name = "item_id")
@GeneratedValue(strategy = GenerationType.AUTO)
public long getItemId() {
return itemId;
}
public void setItemId(long itemId) {
this.itemId = itemId;
}
@ManyToOne
@JoinColumn(name = "client_id", nullable = false)
public Client getClient() {
return client;
}
public void setClient(Client client) {
this.client = client;
}
//public int hashCode() {...
//public boolean equals(Object obj) {...
}
上面的代碼(以及其他許多不同的設置)遊戲推出時會產生以下錯誤:
了java.lang.RuntimeException。 avaje.ebeaninternal.server.deploy.parse.ReadAnnotations.readAssociations(ReadAnnotations.java:73) 〜[ebean.jar:na] at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.readDeployAssociations(BeanDescriptorManager.java:1100 ) 〜[ebean.jar:na]
我不知道我的代碼可能有什麼問題。我開始認爲這是一個PLAY錯誤。有任何想法嗎?
你有一個堅實的理由堅持複合PK?即使您設法處理這個問題,您也可能因此面臨其他幾個問題。爲什麼不在item表中添加一個額外的列(比如items_id),並在(client_id,item_id)上添加一個唯一索引。 (我想item_id是指物品表,就像client_id引用客戶表一樣)。 – bpgergo
@bpgergo謝謝你的回答。你的解決方案是可以接受的,但我寧願避免額外的列和索引。令我驚訝的是,這樣一個簡單的案例需要解決。如果幾天內沒有解決方案,我會重新考慮。至於item_id,目前它並沒有引用任何其他表,但將來可能會改變。 – Grzywa
標籤:hibernate **在這裏不正確。沒有Hibernate也沒有JPA – ses