你能帮我解决一个小问题吗? 它涉及Spring Data,JPA和Hibernate的项目。
我有2个实体,我需要彼此加入。是的,听起来很简单:)
首先是活动:
public class Activity {
...
@Column(name="STATUS_ID")
private String statusId;
...
}
其次是Vocab Value(用户可以将其作为一个简单的值列表来管理):
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 Value的名称并加入它。
在目标状态下,我的实体应如下所示:
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() {
}
...
}
我应该如何配置我的Activity实体来提供此功能? 好的,有可能吗?
我很感激你的意见!
感谢!
更新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作为Detached实体应该按照Hibernate规范实现Serializable接口)。
public VocabValue implemets Serializable {...}
它有效,但注释@Where不起作用:仅使用@JoinColumn规范进行连接,@ Where子句中定义的附加标准不适用。
是否有解决方法?
更新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;
谢谢!)
答案 0 :(得分:0)
通过以下配置解决:
@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;
谢谢)