2015-02-11 73 views
1

我正在使用Hibernate進行持久化的Spring-MVC項目。在其中一個模型類中,我有一個我想要堅持的列表。我面臨這個問題,因爲我不知道在PostgreSQL中使用哪種數據類型,並且我需要以某種方式指示hibernate,或者我嘗試持久保存列表。性能要求在這個列表中並不是很大的問題,因爲它沒有得到那麼多的操作。我張貼一些代碼供參考,請讓我知道。非常感謝:Spring mvc:在PostgreSQL中使用Hibernate保存Java列表

GroupAccount模型類:

@Entity 
@Table(name="groupaccount") 
public class GroupAccount { 

@Column(name = "blacklist") 
    private List<String> blacklist; 
    public List<String> getBlacklist() { 
     return blacklist; 
    } 

    public void setBlacklist(List<String> blacklist) { 
     this.blacklist = blacklist; 
    } 
} 

我有時會要求更新黑名單的價值,所以我必須在DAO的方法,它更新groupAccount,我下面粘貼。

GroupAccountDAOImpl編輯功能:

@Override 
    public void editGroupAccount(GroupAccount groupAccount) { 
     session = this.sessionFactory.getCurrentSession(); 
     GroupAccount groupAccount1 = (GroupAccount)session.get(GroupAccount.class,groupAccount.getGroupId()); 
     if(!(groupAccount1==null)){ 
      groupAccount.setOwnedcanvas(groupAccount1.getOwnedcanvas()); 
      groupAccount.setGroupMembersSet(groupAccount1.getGroupMembersSet()); 
      session.merge(groupAccount); 
      session.flush(); 
     } 
    } 

一個用例在黑名單中添加用戶:

List<String> blackListUsers; 
blackListUsers = groupAccount.getBlacklist(); 
blackListUsers.add(memberForBlackListing.getMemberUsername()); 
groupAccount.setBlacklist(blackListUsers); 
this.groupAccountService.editGroupAccount(groupAccount); 
removeAllMemberships(memberId); 
return true; 

任何幫助將是很好。非常感謝。 :-)

回答

1

您不能將List<String>映射到單個列。對於這些情況,@ElementCollection使用

@ElementCollection 
@CollectionTable(name="blacklist", [email protected](name="group_account_id") 
@Column(name = "name") 
private List<String> blacklist; 

這需要一個名爲blacklist用(這將作爲一個外鍵group_account表)列namegroup_account_id數據庫表。當然,表和列名稱是可定製的。

+0

好的。非常感謝,但是還有其他類型可以使用,就像我可以用於上述用例的數組一樣。我只需要檢查一個電子郵件地址是否存在於黑名單中,並添加一個電子郵件,但在同一個數據庫表中。非常感謝。 – 2015-02-11 10:29:22

+0

您可以使用簡單的「字符串」字段,並將列表保留爲逗號分隔值(CSV)。需要一個小包解包代碼,但這是最簡單的解決方案。 – 2015-02-11 10:31:39

+0

我同意。我會盡力而爲。非常感謝。 – 2015-02-11 10:32:16

相關問題