我正在與JPA拼搏。我嘗試了幾件事,但我無法弄清楚標註的正確方法。 想要什麼就像訂單/訂單行關係。休眠 - 映射屬性OneToMany。 (如OrderLine)不關聯
因此:
- 訂單(PK =訂單ID,字段= [...])
- 訂單行(PK1 =訂單ID,PK2 = orderLineId,字段= [...])
顯然,OrderLine.orderId是指'訂單'表。
我在功能上想要做的是至少:
- 檢索與和沒有所有orderlines訂單。它應該有一個集合
- 通過完整的PK檢索訂單,但沒有關聯的訂單。
- 通過orderId檢索訂單列表。
我只想要這兩個表和類。沒有什麼比這更少。 我嘗試了幾件事情。任何人都可以通過在這兩個類中加入正確的註釋和成員來幫助我?
編輯:我到目前爲止所做的。 請注意,在此實際示例中,User = Order和UserRun = OrderLine。所以,我對一個單獨的'Run'實體不感興趣。僅僅是由Orderline描述的UserRun。
@Entity
@Table(name = "user_runs")
public class UserRun {
@EmbeddedId
private UserRunKey id;
public UserRun(){};
public UserRun(String userName, String runUuid) {
this.id = new UserRunKey(userName, runUuid);
}
public String getUserName() {
return this.id.getUserName();
}
public String getRunUuid() {
return this.id.getRunUuid();
}
}
@Embeddable
class UserRunKey implements Serializable {
@Column(name = "username")
private String userName;
@Column(name = "run_uuid")
private String runUuid;
public UserRunKey(){};
public UserRunKey(String userName, String runUuid) {
this.runUuid = runUuid;
this.userName = userName;
}
public String getUserName() {
return userName;
}
public String getRunUuid() {
return runUuid;
}
}
這創造了一個userruns /訂單項目表中的錯誤的方法的PK: 創建表user_runs(run_uuid VARCHAR(255)不爲空,用戶名VARCHAR(255)不爲空,主鍵(run_uuid,用戶名) )
- 我想讓主鍵反向。
- 我想要用戶名爲FK給用戶
- 我想在我的User-class中設置一個。
當我做我的用戶級以下:
@OneToMany
private Set<UserRun> userRuns;
這將創建一個 創建表user_user_runs(user_username VARCHAR(255)NOT NULL,user_runs_run_uuid VARCHAR(255)NOT NULL,user_runs_username varchar(255)不爲null,主鍵(user_username,user_runs_run_uuid,user_runs_username)) 這就是我絕對不想要的東西!再次,我不想要一個運行對象(與Order Line一樣,沒有人對Line類感興趣)
你應該張貼到現在爲止您做了什麼,並解釋你的問題。 – davidxxx
編輯原文。儘管如此,我認爲這使問題更加不清楚。它基本上應該是這樣的:我想要2個類:Order,OrderLine。我也想要2個表:Order(pk = orderId),OrderLine(pk =(orderId,orderLineId))。如何用JPA註釋完成這樣一個簡單的例子? –
如果runUuid(該名稱似乎是唯一的,並且因此足以唯一標識一個UserRun)就是實體的主鍵,那麼一切都會容易得多。然後,您將擁有一個由連接列映射的簡單直觀的標準OneToMany關聯。 –