hibernate将多个列映射到arraylist

时间:2014-09-04 22:43:47

标签: 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 = 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);
        }

    }

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

2 个答案:

答案 0 :(得分:2)

似乎我没有回答你的问题......但是...有一个像你要求的功能:

  • 但注释不支持 - 仅xml映射
  • 但不是List<> - 而是 Map 非通用

首先,为什么只是xml?因为它是一个与类无关的动态组件,请参阅:

  

在Component类中,有一个名为dynamic的属性,它允许在xml配置中支持dynamic-component属性类型。注释目前不支持动态组件...

这引导我们谈论我们所说的:

9.5。动态组件<dynamic-component>

让我们总结一下doc:

  

您还可以映射Map:

类型的属性
<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>
  

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

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

也许,请检查这个(NHibernate,但基本含义相同)

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

答案 1 :(得分:0)

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