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

感謝的! )