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

为测试/生产支持不同的JPA生成类型

  •  4
  • Tim  · 技术社区  · 15 年前

    我想在我的生产mysql系统中使用generationtype.identity作为主键。但是对于本地开发和测试,我想使用hsqldb。问题是hsqldb不支持generationtype.identity(至少使用eclipselink)。我尝试设置generationtype.auto,它默认为hsqldb的table,但不幸的是,它对mysql也是如此,这不是我想要的。在persistence.xml中有什么方法可以覆盖它吗?是否还有其他一些技巧可以让每个环境都做正确的事情?我没有在XML中设置任何实体配置(全部在注释中),我不想更改这个配置,所以我正在寻找一种避免这种情况发生的方法。

    2 回复  |  直到 15 年前
        1
  •  2
  •   ChssPly76    15 年前

    这里的基本思想是使用一个定制的生成器,它将在内部根据元数据信息在标识和表(或者您需要的其他策略)之间进行切换。

    然而,使用标准JPA是没有办法做到这一点的。同时 @GeneratedValue 注释没有定义 generator 使您能够 specify a custom generator 它不提供编写机制(只允许使用内置表/序列生成器)。

    由特定的JPA提供者来实现这个功能。EclipseLink维基 has an example 自定义生成器的定义方式。你需要修改它来创建 TableSequence / NativeSequence 实例内部,并根据 session.getPlatform() .

    免责声明:我没有使用eclipselink尝试上述方法;不过,我在Hibernate中做了一些非常类似的事情。

        2
  •  1
  •   DataNucleus    15 年前

    显然,hsqldb本身支持标识列(绝对在v1.8中),所以这是eclipseLink中的一个缺陷。例如,DataNucleus为hsqldb提供身份支持。

    正如您清楚地知道的,指定使用XML对跨数据存储部署有好处。