2010-06-10 55 views
2

是否有可能將靜態集合作爲hibernate實體的成員?靜態集合作爲成員的休眠(JPA)實體

說我有一個對象問題:

public class Question { 
    private String category; 

    ... 
} 

有沒有可能來填充一組靜態<字符串>這是一組不同的數據庫中的所有類別的?我知道我可以對此進行查詢,但我想知道是否有更優雅的解決方案,因爲它似乎是其他人可能遇到的問題。

回答

2

據我所知,JPA無法堅持staticfinal字段。這個規範並不是很清楚,但它使IMO有意義,因爲我沒有看到OneToXXX關係中的關係(因此JPA應如何加載它)。您可能需要檢查the following thread以獲取ejb3專家組的一些反饋意見(即不是最終答案)。恐怕你會不知何故將你所有的QuestionCategory連接起來。

但也許你會得到更多「滿意」的答案。讓我們來看看。

+0

我沿着從一個SELECT DISTINCT拉只讀集合的​​線路意思查詢。 – partkyle 2010-06-11 00:04:19

+0

@凱爾是的,我理解這個想法,但我不知道如何告訴JPA以一種很好的方式來做到這一點。我很好奇你是否能得到更好的答案。 – 2010-06-11 00:25:26

2

簡單但不完美的解決方案將使用實體@PostLoad回調方法上CategoryQuestion實體(或兩者):

@Entity 
public class Question { 
    public static Set<String> categories = new HashSet<String>(); 
    ... 

    @PostLoad 
    public void fillInCategories() { 
    categories.add(category); 
    } 

} 

categories是懶加載 - 直到包含每一個類別中的所有問題都裝好了贏得」完整。

0

使用屬性訪問。

默認情況下,ObjectDB直接訪問字段,但間接訪問領域使用get和set方法的屬性也支持:

@Access(AccessType.PROPERTY)