【问题标题】:How to persist a List of Strings in Hibernate?如何在 Hibernate 中持久化字符串列表?
【发布时间】:2011-08-17 13:12:51
【问题描述】:

我似乎在 Hibernate 中映射列表时遇到问题。在我们的项目中有一个类Card 包含一个类Answer 和一个Answer 包含一个List<String>

Hibernate 是否可以使用注解映射List<String>?我的意思是,因为它没有@Entity 注释?

问候

【问题讨论】:

    标签: java string hibernate list annotations


    【解决方案1】:

    如果您愿意将它们存储在与 JSON 相同的列中(MySQL、PostgreSQL 也支持索引和二进制 JSON),您可以简单地使用 com.vladmihalcea/hibernate-types-52 库。

    @TypeDefs({
        @TypeDef(name = "json", typeClass = JsonType.class)
    })
    public class YourEntity {
       @Column(nullable = false)
       @Type(type = "json")
       private List<String> fieldName = List.of();
       ...
    }
    

    查看完整指南here

    【讨论】:

      【解决方案2】:

      使用@ElementCollection:

      @ElementCollection
      @CollectionTable(name="Nicknames", joinColumns=@JoinColumn(name="user_id"))
      @Column(name="nickname")
      public List<String> getNicknames() { ... } 
      

      来源: 7.2.3. Collections of basic types and embeddable objects

      【讨论】:

      • 只是一个问题:CollectionTable如果没有创建,会自动创建一个名为“Nicknames”的表吗?
      • @BigDude 如果你让你的模式由休眠生成/更新,那么我猜是的。但是我使用hibernate已经快10年了:-)
      • 你说得对,我试过了,如果我让 Hibernate 处理创建/更新过程,它将为我创建和更新CollectionTable 中定义的表:) 谢谢!
      • @ThiagoSuchorski 我几乎从不使用关系数据库。但如果我这样做了,我可能会使用jooq
      【解决方案3】:

      试试

        @org.hibernate.annotations.CollectionOfElements(
              targetElement = java.lang.String.class
          )
          @JoinTable(
              name = "foo",
              joinColumns = @JoinColumn(name = "foo_id")
          )
          @org.hibernate.annotations.IndexColumn(
              name = "POSITION", base = 1
          )
          @Column(name = "baz", nullable = false)
          private List<String> arguments = new ArrayList<String>();
      

      或见this detail example

      猜你喜欢
      • 1970-01-01
      • 2016-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-16
      • 2015-12-17
      • 2011-03-05
      • 1970-01-01
      相关资源
      最近更新 更多