代码之家  ›  专栏  ›  技术社区  ›  emeraldjava

JPA/Hibernate将动态列映射为对象列表

  •  10
  • emeraldjava  · 技术社区  · 16 年前

    我有一个现有的数据库模式,我正试图用JPA/Hibernate注释来创建它。架构的设计目的是 允许客户机将额外的信息与表中的每一行关联起来。而不是使用键值模式 现有的解决方案确定安装时所需的动态列数,并将表更改为 为动态字段添加额外的列。实际上,每个表都有一组已知/固定列和一组动态列。

    |table:X|
    |id|known1|known2|dynamic1|dynamic2|..|dynamicx|
    

    参数表指示哪些表具有额外的动态字段

    |table:parameter|
    |table|column|meta|
    |x|dynamic1||
    |x|dynamic2||
    |x|dynamicx||
    |y|dynamic15||
    

    在JPA建模中,很容易为每个表上已知的固定列创建定义。

    @Entity
    @Table(name="x")
    public class X
    {
        @Id
        private Long id = null;
    
        @Column(name="known1")
        private Long known1 = null;
    }
    

    我计划将参数表建模为一个类,然后允许我的每个类都有一个参数列表。 我不确定该如何映射这个列表对象,以便将细节写入同一个表。

    @Entity
    @Table(name="x")
    public class X
    {
        // @Column(name="x",class="X") ??????????
        List<Parameter> dynamicColumns = null;
    }
    

    我相信我可以使用自定义命名策略来正确地确定动态字段的列名。这是吗 可能的映射类型?

    2 回复  |  直到 13 年前
        1
  •  1
  •   AmanicA    15 年前

    我认为您需要使用native查询来使用jpa获取动态数据。

        2
  •  0
  •   Mohammed Rafeeq    13 年前

    在休眠状态下,这是可能的,请参阅下面的文章。然而,这是一个老方法(2007年),我自己也正在努力使用JPA实现它。到目前为止还没有成功

    http://www.infoq.com/articles/hibernate-custom-fields

    此主题中的另一个电子邮件线程是

    https://www.java.net//node/666078