假设我有一个实体:
@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。我无法想象这是一种“正确”的方式来做到这一点。