我正在學習 Java 和 Spring 框架,因此,在我的 Java Web 應用程式中,我有介面Client和 2 個實作此介面的類 -PersonClient和CompanyClient. 此外,還有Account實作此介面的介面和類 - DebitAccount:
package com.bankapp.bankwebapplication.models;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class DebitAccount implements Account {
@Id
private Long id;
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
private Long clientId;
public Long getClientId() { return clientId; }
public void setClientId(Long clientId) { this.clientId = clientId; }
private Long amountOfMoney;
public Long getAmountOfMoney() { return amountOfMoney; }
public void setAmountOfMoney(Long amountOfMoney) { this.amountOfMoney = amountOfMoney; }
}
該類已歸檔clientId。這是一個問題。如您所見,這不是 DB,因此,我不能只創建private Long clientId. 它必須是類而不是Long資料型別,但是,我有介面,我無法創建介面實體,但我明白,我不能這樣,它必須是類資料型別,而不是Long.
我在考慮抽象類,但是,和介面一樣,它是關于多型的,我也不能創建抽象類實體。如何弄清楚?或者我應該只為CompanyClientand創建 2 個欄位PersonalClient?
uj5u.com熱心網友回復:
“...這不是 DB...”與@Entity 注釋相反。您的欄位 clientId 似乎是對您的客戶物體之一的外部參考。
通常這種 1:n 關系是由 JPA 通過物體參考建模的,盡管 DB 只有一個 Long ClientId 作為外鍵。當您獲取結果集時,客戶端實體的創建由 JPA 實作(例如 Hibernate)完成。
但是您必須通過指示描述關系的 DB-Field 來注釋成員。例如(假設一位客戶可以擁有多個 DebitAccount):
@ManyToOne(mappedBy="clientId")
Client client;
另一方面,@Entity 實作(Client 的后代)必須注釋 Hibernate 如何區分這兩種型別,例如通過 DB-Field ClientType。有很多可能性可以對此進行建模。此鏈接可能是一個起點。
uj5u.com熱心網友回復:
這是我對問題的解決方案。我只是transient在類名和變數名之前添加,就像這樣:
private transient Client clientId;
public Long getClientId() { return clientId.getId(); }
public void setClientId(Client clientId) { this.clientId = clientId; }
并且,例如,使用getClientId我只需要在介面中呼叫方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/372971.html
