3

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

我的问题是选择持久化这些对象的最佳方式。

我看到了许多可能的方法,但我都没有成功实施。但在我承诺其中之一之前,我想知道我是否做错了,或者我对如何实施这件事有点离题。

我有一个已经持久化的用户类。

选项#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){

}


}

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

4

1 回答 1

3

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

于 2012-06-20T04:31:33.917 回答