Java hibernate将多个列映射到arraylist

Java hibernate将多个列映射到arraylist,java,hibernate,hibernate-mapping,Java,Hibernate,Hibernate Mapping,我想知道hibernate是否允许使用arrayList来表示多个列 例如: 我有一个名为“tableA”的表,其中有列: 表a: |id | c1 | c2 | c3 | c4| 我想创建一个java对象,使用arrayList映射到c1、c2、c3、c4列 @Entity @Table(name = "tableA") public class tableA{ @Column(name = "id", unique = true, nullable

我想知道hibernate是否允许使用arrayList来表示多个列

例如: 我有一个名为“tableA”的表,其中有列: 表a: |id | c1 | c2 | c3 | c4|

我想创建一个java对象,使用arrayList映射到c1、c2、c3、c4列

    @Entity
    @Table(name = "tableA")
    public class tableA{

        @Column(name = "id", unique = true, nullable = false)
        public int id;

        //QUESTION:  How do I annotate here to map columns c1,c2,c3,c4 to below arraylist ? ----
        public List<String> columns = new ArrayList<>();


        //I tried this, but it doesn't work :
        @Column(name = "c1", length=10)
        public String getC1(){
            return columns.get(0);
        }

        public String setC1(String c1){
            columns.add(c1);
        }

    }
@实体
@表(name=“tableA”)
公共类表格{
@列(name=“id”,unique=true,nullable=false)
公共int id;
//问题:我如何在这里注释以将列c1、c2、c3、c4映射到arraylist下面----
public List columns=new ArrayList();
//我试过这个,但不起作用:
@列(name=“c1”,长度=10)
公共字符串getC1(){
返回列。get(0);
}
公共字符串集合c1(字符串c1){
添加(c1)列;
}
}

如何在此处进行注释以将列c1、c2、c3、c4映射到arraylist下面?

Hibernate中没有此类功能,您需要将实体的各个字段映射到映射表中的相应列

看来我没有回答你的问题。。。但是有一项功能与您所请求的类似:

  • 但是注释不支持它,只支持
    xml
    映射
  • 但它不是关于
    列表
    ——而是关于
    地图
    非通用的
首先,为什么只使用xml?因为它是一个与类无关的动态组件,请参见:

  • (引述)
在Component类中,有一个名为dynamic的属性,它允许在xml配置中支持动态组件属性类型。批注当前不支持动态组件

这就引出了我们所谈论的:

9.5. 动态组件
让我们总结一下文档:

您还可以映射类型为map的属性:


映射的语义与
相同。这种映射的优点是,只需编辑映射文档,就可以在部署时确定bean的实际属性。还可以使用DOM解析器对映射文档进行运行时操作。您还可以通过configuration对象访问和更改Hibernate的配置时间元模型

如文档中所述,通过这种方式,我们可以使用一些表示列的键字典和表示内容的值字典

也许,也可以勾选这个(NHibernate,但基本含义是相同的)


最后:我经常在业务用户驱动的其他领域使用此功能。这些确实需要一些元数据管理和udpated
xml
映射才能工作。没有别的了。更重要的是,因为这些是列(不是动态行),我们也可以按它们排序…

如果您希望列在列表中。你必须手动操作。柴坦尼亚,如果你好奇的话,有一种解决办法。。。我将其描述为另一个答案。非常感谢Radim,我还将尝试此解决方案以了解其工作原理。当我有多个节点位于负载平衡器后面时,动态组件功能如何工作?我认为Hibernate不会负责更新所有节点上的元数据。那么,在使用此功能时,这可能是一个约束条件吗?
<dynamic-component name="userAttributes">
    <property name="foo" column="FOO" type="string"/>
    <property name="bar" column="BAR" type="integer"/>
    <many-to-one name="baz" class="Baz" column="BAZ_ID"/>
</dynamic-component>