我有一個遺留數據庫,因爲它連接到第三方應用程序,所以無法更改。JPA/HIbernate:多次加入2個實體
一個我和一個新的應用程序看起來像下面的工作查詢:
SELECT COL1, COL2, COL3, CODE1, CODE2, (SELECT CODE_DESC FROM CODETABLE WHERE CODE_TYPE='A' CODE=INCIDENT.CODE1) AS CODE_DESC1, (SELECT CODE_DESC FROM CODETABLE WHERE CODE_TYPE='B' CODE=INCIDENT.CODE2) AS CODE_DESC2 FROM INCIDENT WHERE...
我試圖找出如何到的查詢翻譯成一組Hibernate的實體,但我是Hibernate的新手。我有3個問題:
- 如何將一個實體以一對一的關係多次加入另一個實體? (子查詢)
- 如何將一個實體與另一個實體以一對一的關係使用a(缺少更好的單詞)參數具有固定值(CODE_TYPE ='A')?
- 是否有可能使用註釋做上述任何一項(因爲我喜歡這些)?
這是我已經試過迄今沒有奏效:
對象1:
@Entity
@Table (name="Incident")
public class Incident {
private String col1;
private String col2;
private String col3;
private String code1;
private String code2;
private Code code_desc1;
//private String code_desc2;
/**
* @param code_desc1 the code_desc1 to set
*/
public void setCode_desc1(Code code_desc1) {
this.code_desc1 = code_desc1;
}
/**
* @return the code_desc1
*/
@OneToOne
@JoinTable(name="Codes",
[email protected](name="code1", referencedColumnName="CODE"),
[email protected](name="CODE_TYPE", referencedColumnName="'A'")
)
public Code getCode_desc1() {
return code_desc1;
}
// Rest of Getters & Setters...
}
對象2:
@Entity
@Table (name="CODETABLE")
public class Codes {
@Column(name="CODE_DESC")
private String codeDesc;
@Column(name="CODE_TYPE")
private String codeType;
@Column(name="CODE")
private String code;
// Getters & Setters
}
基本上,當我運行該程序,它抱怨「A」不是代碼實體中的列名。 感謝您的幫助!
我一直在解決這個問題,我同意。歸結起來,將所有東西都放在一個視圖中,並將一個實體綁在一起。我真的想要一個更加Hibernatey的方式來處理這兩個對象,而不是一切都是一個對象,但唯一的辦法是每個子查詢都會包含一個不同的Code對象。我縮短了這個例子的查詢。在原始查詢中有23個子查詢,每個子查詢都有自己的代碼類型。我有1個用戶有數百個導致程序崩潰的事件。因此,除非我能找到另一種解決方案,否則現在是1視圖。 – kelleystar