1

假设我有一个实体:

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

4

2 回答 2

1

因此,您想要创建一个映射,其中每个AnEntity都有许多字符串,并且每个字符串可以属于许多 AnEntities。那么你应该使用@ManyToMany,因为它是多对多的关系。

于 2010-02-02T15:54:56.223 回答
0

而不是使用Vector,使用HashSet

所以也许这样做:

private Set<String> strings = new HashSet<String>();
于 2010-02-02T15:52:23.250 回答