【问题标题】:Spring mvc : Saving a Java List in PostgreSQL with HibernateSpring mvc:使用 Hibernate 在 PostgreSQL 中保存 Java 列表
【发布时间】:2015-04-11 15:48:12
【问题描述】:

我正在开发一个 Spring-MVC 项目,我在其中使用 Hibernate 进行持久性。在其中一个模型类中,我有一个要保留的列表。我正面临这个问题,因为我不知道要在 PostgreSQL 中使用哪种数据类型,并且我是否需要以某种方式指示休眠,我试图保留一个列表。性能要求在此列表中并不是什么大问题,因为它没有得到太多的操作。我发布了一些代码供参考,请告诉我。非常感谢:

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;

任何帮助都会很好。非常感谢。 :-)

【问题讨论】:

    标签: java spring postgresql hibernate spring-mvc


    【解决方案1】:

    您不能将List&lt;String&gt; 映射到单个列。对于这些情况,使用@ElementCollection

    @ElementCollection
    @CollectionTable(name="blacklist", joinColumns=@JoinColumn(name="group_account_id")
    @Column(name = "name")
    private List<String> blacklist;
    

    这需要一个名为blacklist 的数据库表,其中包含namegroup_account_id 列(将用作group_account 表的外键)。当然,表名和列名是可自定义的。

    【讨论】:

    • 好的。非常感谢,但是我可以使用其他类型吗,例如可以用于上述用例的数组。我只需要检查黑名单中是否存在电子邮件地址并添加电子邮件,但在同一个数据库表中。非常感谢。
    • 您可以使用简单的String 字段,并将列表保留为逗号分隔值 (CSV)。需要一点打包解包代码,但这是最简单的解决方案。
    • 我同意。我会尝试的。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2020-02-22
    • 2020-09-25
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    相关资源
    最近更新 更多