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;
感谢)