带有实体或原语的@ElementCollection或@OnetoMany?

时间:2012-06-20 01:44:17

标签: java hibernate jpa

我有一个包含多个页面的网站,每个页面都有一个包含一些数据的表格。这些表有很多列,用户可以选择要显示或隐藏的列。我试图坚持这些选择。

我的问题是选择保留这些物体的最佳方法。

我看到很多可能的方式,其中没有一方能够成功实施。但在我承诺其中之一之前,我想知道我是否做得非常错误,或者是否应该如何实施。

我有一个已经存在的用户类。

选项#1 在我的用户实体中,添加Map>的字段。其中键是页面名称,列表是用户在该页面上选择的列。使用@ElementCollection。

选项#2 用户实体具有@onetomany列表。这需要一个UserColumns实体,其中pagename作为主键,并且@oneToMany与每列的另一个实体的关系。

选项1:

@Entity
public class User{

private Map<String, List<String>> columns;

@ElementCollection
public void setColumns(Map<String, List<String>> colunms){

}


}

选项2:

@Entity
public class User{

private List<UserColumns> columns;

@ElementCollection or @OneToMany
public void setColumns(List<UserColumns> colunms){

}


}

我意识到如果不查看实际代码就很难回答,而且我可能没有充分或准确地描述这种情况,但仍欢迎所有输入。谢谢。

1 个答案:

答案 0 :(得分:3)

我个人总是喜欢在做这样的事情时使用与其他实体的一对多关系。我的理由是,这是一个更加灵活的设计。很容易看到一个场景,而不仅仅知道列名称,您将需要其他信息。通过使用真实实体而不是字符串,您只需向类中添加新属性即可。如果您只使用一个字符串,那么您的手上将进行更广泛的重构。在开始时需要更长的时间,但它最终总会得到回报。