【问题标题】:JPA/Hibernate mapping dynamic columns as a List of objectsJPA/Hibernate 将动态列映射为对象列表
【发布时间】:2010-09-07 10:23:41
【问题描述】:

我有一个现有的数据库架构,我正在尝试使用 JPA/Hibernate 注释对其进行 ORM'ise。该架构旨在 允许客户将额外信息与表中的每一行相关联。而不是使用键值模式 现有解决方案在安装时确定所需的动态列数,并将表更改为 为动态字段添加额外的列。实际上,每个表都有一组已知/固定列和一组动态列。

|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;
}

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

【问题讨论】:

  • 我希望您能够更改数据库...这听起来像是需要一些规范化的架构。
  • 对于这个问题,我们假设我不能。我想我快要撞到砖墙了。

标签: java hibernate orm jpa


【解决方案1】:

我认为您需要使用 nativeQuery 来使用 jpa 获取此动态数据。

【讨论】:

  • +1:我认为 JPA 不是为这种需求而设计的,如果你设法做到了,那将付出巨大的代价(和肮脏的黑客攻击)。尽可能使用本机查询和ResultTransformers,这就是 Hibernate 可以在这里提供的全部内容。
  • 这没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
  • @Chaos 这并不意味着批评,在我看来这是解决这个问题的最佳方法,即从表中查询动态列的列表。
【解决方案2】:

在 Hibernate 中这是可能的,请参阅下面的文章。然而,这是一种旧方法(2007 年),我本人正在努力使用 JPA 来实现它。暂时没有成功

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

本主题中的另一个电子邮件主题是

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

【讨论】:

  • 由于链接最终会消失,强烈建议不要仅链接答案。
猜你喜欢
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 2011-04-23
  • 2013-03-11
  • 2014-11-02
  • 1970-01-01
  • 2013-03-01
  • 2022-08-15
相关资源
最近更新 更多