我正在使用hibernate 5.4.32。我有兩個JPA物體,它們之間沒有任何關聯。有什么方法可以讓我在物體中得到結果嗎?
物體1
@Entity
@Table(name = "XYZ_EC")
public class LoanOrder{
@Id
UUID id。
public List<DDLTable> ddlTables; // select TABLE_NAME, DESCRIPTION, FILTER_TYPE from DDLTable where TABLE_NAME = 'ABC', this is the query i want to be executed.
//LoanOrder物體沒有任何列可以映射到DDL物體。
物體2
@Table(name = "DDL_TABLE"/span>)
@Entity(name = "DDL_TABLE")
public class DDLTable implements Serializable {
@Id>
@Column(name = "TABLE_NAME"/span>)
private String tableName;
@Id
@Column(name = "DESCRIPTION" )
私人字串描述。
@Id@Column(name = "FILTER_TYPE")
私有字串filterType。
}
uj5u.com熱心網友回復:
你可以嘗試使用@JoinFormula
@OneToMany
@JoinFormula("TABLE_NAME = 'ABC'"/span>)
public List<DDDLTable> ddlTables;
請在檔案中找到更多資訊。 https://docs.jboss.org/hibernate/orm/5.5/userguide/html_single/Hibernate_User_Guide.html#associations-JoinFormula
uj5u.com熱心網友回復:
盡管這不是你想要實作的非常正確和干凈的方法(最好是使用第三個類,一個DTO來保存你想要的來自兩個物體的所有資料),你可以嘗試以下方法:
在LoanOrder物體中,將ddlTables串列標記為瞬時的,以便JPA忽略它并且不嘗試將這個欄位映射到資料庫列。
@Transient
public List<DDLTable> ddlTables;
那么你應該在某個地方有一個處理資料庫查詢的@Service類吧
@Service
public class LoanOrderService {
@Autowired
EntityManager em;
public LoanOrder loadSomething() {
List<DDLTable> ddlTables = em.createQuery("SELECT ddl FROM DDLTable ddl WHERE ddl.tableName = 'ABC'", DDLTable.class).getResultList()。
//從資料庫中類似地加載一個`LoanOrder`物件,并將其ddlTables串列設定為上面加載的物件。
LoanOrder loanOrder = ....; //從資料庫加載或創建新的取決于你要做什么。
loanOrder.setDdlTables(ddlTables)。
return loanOrder;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/317515.html
標籤:
上一篇:更新表時欄位被更新為空
