2010-09-07 26 views
9

我有一个现有的数据库模式,我正在尝试使用JPA/Hibernate批注进行ORM'ise。该架构设计为允许客户使用表中的每一行来分配额外的信息 。现有解决方案在安装时确定所需的动态列数,而不是使用键值模式 ,并将表更改为 为动态字段添加额外的列。实际上,每个表都有一组已知/固定的列和一组动态列。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; 
} 

我打算将参数表建模为一个类,然后让每个类都有一个参数列表。 我不确定我该如何去映射这个List对象,以便将细节写入同一张表。

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

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

+1

我希望你能够改变数据库......这听起来好像是需要一些标准化的模式。 – Zoidberg 2010-09-07 10:29:49

+0

这个问题让我们假设我不能。我想我已经接近击中了砖墙。 – emeraldjava 2010-09-07 10:49:40

回答

1

我想你需要使用nativeQuery来使用jpa来获取这个动态数据。

+0

+1:我认为JPA并不是为这种需求而设计的,如果你设法做到这一点,它将会花费很大的代价(和肮脏的黑客)。只要有可能,只要使用本机查询和'ResultTransformer',这就是Hibernate所能提供的全部内容。 – Vincent 2013-03-04 13:30:45

+0

这不提供问题的答案。要批评或要求作者澄清,请在其帖子下方留言。 – Chaos 2014-04-25 19:48:42

+0

@Chaos这不是一个批评,我认为这是解决这个问题的最好方法,即查询表中动态列的列表。 – AmanicA 2014-04-25 23:43:51