0
你能幫我解決一個小問題嗎? 這是關於Spring Data,JPA和Hibernate的項目。如何通過ID加入實體
我有2個實體,我需要加入一個到另一個。是的,這聽起來很簡單:)
首先是活動時間:
public class Activity {
...
@Column(name="STATUS_ID")
private String statusId;
...
}
二是翻譯值(用戶可以管理它的值的簡單列表):
public class VocabValue {
...
// Type of vocab (in our case - 'ACT_STAT')
@Column(name="TYPE")
private String type;
// Name - code of Vocab value
@Column(name="NAME")
private String type;
// Value
@Column(name="VAL")
private String value;
...
}
在我的情況下,我想在一個活動中存儲一個Vocab值的名稱並加入它。
目標狀態,我的實體應該是這樣的:
public class Activity {
...
@Column(name="STATUS_ID")
private String statusId;
@... what?
private String status;
// Getter returns Vocab Value in accordance with the following join spec (pseudo-sql):
// select voc.value from VocabValue voc where voc.name = %statusId% and type = 'ACT_STAT'
public String getStatus() {
}
...
}
應該如何配置我的活動實體來提供呢? 好的,這可能嗎?
我將非常感謝您的建議!
謝謝!
更新13.01
我試過這個解決方案:
public class Activity {
...
@Column(name="STATUS_ID")
private String statusId;
@JoinColumn(name = "STATUS_ID", referencedColumnName = "NAME", insertable = false, updatable = false)
@Where(clause = "type = 'ACT_STAT'")
@ManyToOne(optional = true)
@NotFound(action = NotFoundAction.IGNORE)
private VocabValue status;
...
}
此外,我不得不做出VocabValue實現Serializable接口(VocabValue作爲獨立實體應按照Serializable接口的implemetation Hibernate規範)。
public VocabValue implemets Serializable {...}
它的工作原理,但註釋@Where不起作用:加入只有@JoinColumn規範執行,附加標準,@Where條款規定不適用。
是否有解決方法? -
UPDATE 13.01 2
它與下面的配置解決:
@JoinFormula(value="SELECT v.ROW_ID FROM VOCAB v WHERE v.NAME=STATUS_ID AND v.TYPE='ACT_STAT'")
@ManyToOne
@NotFound(action = NotFoundAction.IGNORE)
private VocabValue status;
感謝)