假設我有一個實體:故障持續列表時創建的字符串的獨特表<String>
@Entity
public class AnEntity implements Serializable{
@ElementCollection
private List<String> strings = new Vector<String>();
// other stuff
}
我使用的EclipseLink(JPA 2.0)。
此List中的字符串在許多AnEntity對象中可能具有相同的值。 也就是說,許多AnEntity對象可能會引用相同的字符串。
問題是@ElementCollection提供的默認映射在字符串表(ANENTITY_STRINGS)中留下了許多重複項。我如何映射這個以便當我保存字符串列表時,是否保存唯一的值,以便我沒有大量的重複字符串表?
我應該補充一點,我已經嘗試使用「佔位符」類,它有一個字符串的單個成員。不幸的是,這樣做會使相關表中的數據完全無法讀取,我相信它會被保存爲blob或lob。所以,比如我做了這樣的事情,而不是使用列表:
@ElementCollection
@ManyToMany
private List<StringWrapperClass> strings = new Vector<StringWrapperClass>();
然後我的實體看起來像:
@Entity
public class StringWrapperClass implements Serializable {
private String string;
// other stuff, getters, setters, id, etc
}
但正如我所說,這使在ANENTITY_STRINGS只是字節。我無法想象這是做到這一點的「正確」方式。
這沒有奏效,持久列表仍然有很多重複。要清楚的是,實體本身在其列表中不會有重複的字符串,它是包含所有重複項的表本身。 – 2010-02-02 15:57:03