Spring mvc:使用 Hibernate 在 PostgreSQL 中保存一个 Java 列表
Spring mvc : Saving a Java List in PostgreSQL with Hibernate
我正在开发一个 Spring-MVC 项目,我在其中使用 Hibernate 实现持久性。在其中一个模型 classes 中,我有一个我想要保留的列表。我正面临这个问题,因为我不知道在 PostgreSQL 中使用哪种数据类型,我是否需要以某种方式或其他方式指示 hibernate 我试图保留一个列表。性能要求在此列表中并不是什么大问题,因为它没有得到那么多的操作。我正在发布一些代码以供参考,请告诉我。非常感谢:
GroupAccount 模型 class :
@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;
任何帮助都会很好。非常感谢。 :-)
您不能将 List<String>
映射到单个列。对于这些情况,使用 @ElementCollection
@ElementCollection
@CollectionTable(name="blacklist", joinColumns=@JoinColumn(name="group_account_id")
@Column(name = "name")
private List<String> blacklist;
这需要一个名为 blacklist
的数据库 table,其中包含列 name
和 group_account_id
(将用作 group_account
的外键 table).当然,table和列名是可以自定义的。
我正在开发一个 Spring-MVC 项目,我在其中使用 Hibernate 实现持久性。在其中一个模型 classes 中,我有一个我想要保留的列表。我正面临这个问题,因为我不知道在 PostgreSQL 中使用哪种数据类型,我是否需要以某种方式或其他方式指示 hibernate 我试图保留一个列表。性能要求在此列表中并不是什么大问题,因为它没有得到那么多的操作。我正在发布一些代码以供参考,请告诉我。非常感谢:
GroupAccount 模型 class :
@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;
任何帮助都会很好。非常感谢。 :-)
您不能将 List<String>
映射到单个列。对于这些情况,使用 @ElementCollection
@ElementCollection
@CollectionTable(name="blacklist", joinColumns=@JoinColumn(name="group_account_id")
@Column(name = "name")
private List<String> blacklist;
这需要一个名为 blacklist
的数据库 table,其中包含列 name
和 group_account_id
(将用作 group_account
的外键 table).当然,table和列名是可以自定义的。