2017-01-12 37 views
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; 

感谢)

回答

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; 

感谢的! )