2013-01-14 41 views
0

我有兩個表:主表,訂單和其他表,狀態。訂單有一個外鍵,status_id。狀態是以下字符串的表格:「完成」,「正在傳送」或「待定」。我是否正確地說我通常會實現的是兩個實體,Order和Status,其中Order實體具有外鍵的多對一映射?我認爲這將是多對一映射的原因是因爲每個訂單隻有一個狀態,但狀態值顯然會被重用(例如,一堆不同的訂單可能具有「過境」狀態)。Hibernate將外鍵映射到值(而不是實體)?

但是,我還有一個問題。由於「狀態」表將只是一個只有一個字符串列的簡單表,並且只有3行,是否有更簡單的方法在Hibernate中實現?它實際上是否必須是一個實體,或者是否存在一些我可以使用的基於價值的映射?

此外,請做任何基於映射的示例(XML)...我使用的是hibernate映射文件,而不是註釋或其他任何東西。

回答

0

如果您的狀態表僅爲字符串,我建議您將status_id摺疊到訂單表中的字符列,並使用Enum編碼各種狀態。您可以添加額外的getter方法來返回Enum而不是狀態。在你的枚舉類,你可以有描述性的字符串,你可以讓他們如名詞,動詞等

這是我在Eclipse中使用用於此目的的例子枚舉模板:

public enum Status { 

COMPLETE("complete"), 
IN_TRANSIT("In transit"); // You can add others here. 

private String _id; 


private Status(String id) { 
    _id = id; 
} 

private static Map<String, Status> _enumById = new HashMap<String, Status>(); 

    static { 
     for (${enclosing_type} type : values()) { 
      _enumById.put(type.getId(), type); 
     } 
    } 


    public String getId() { 
     return _id; 
    } 


    public static Status findById(String id) { 
     return _enumById.get(id); 
    } 
}