【问题标题】:need an example which support mysql and oracle both [duplicate]需要一个同时支持mysql和oracle的示例[重复]
【发布时间】:2012-07-23 11:52:26
【问题描述】:

可能重复:
multiple database support for same JPA classs

我有一张桌子

用户(id,姓名);

现在我想为表创建 JPA 类,以便它可以支持两个数据库。

id 应该是自动递增的。

请通过提供一些示例帮助我实现同样的目标。

提前致谢。

【问题讨论】:

  • 尝试了什么?你在哪里卡住?你遇到了什么问题?
  • 这可能是我个人不喜欢在 Hibernate 中使用注释的原因之一......最后,当涉及到更改数据库时,您最终会修改源代码而不是配置文件。
  • 您只需将一个简单的 hbm 文件和 Pojo 写入您的表。只需更改与您的数据库相关的方言,这两个数据库都可以正常工作。
  • @T.J.Crowder:我们有支持 MYSQL 的应用程序,数据库中的主键是 auto_increment。现在 oracle 支持序列,现在我们无法弄清楚使用相同的 pojo 我们支持 DB(ORACLE 和 MYSQL)的方式可能是什么。
  • 你不是在这个问题前 5 分钟问过同样的问题吗?我指的是stackoverflow.com/questions/11611046/…

标签: java hibernate jpa


【解决方案1】:

直接去GenerationType.TABLE,这是最便携的。它不太依赖于数据库细节,因为递增值是通过 SQL 完成的。我也发现它比 AUTO 更合适,因为相同的生成类型将独立于数据库提供程序使用。您也可以在不使用 TableGenerator 的情况下使用它,但是因为我们的目标是让它在所有数据库中以完全相同的方式运行,所以我们明确给出了所需的值。

在您的情况下,映射是:

@Entity
@TableGenerator(
    name="usersGenerator",
    table="ID_GENERATOR",
    pkColumnName="GENERATOR_KEY",
    valueColumnName="GENERATOR_VALUE",
    pkColumnValue="USERS_ID",
    initialValue = 1,
    allocationSize=1)
public class Users {
    @Id
    @GeneratedValue(strategy= GenerationType.TABLE, 
                    generator = "usersGenerator")
    private Integer value;

    private String name;

    protected Integer getValue() {
        return value;
    }

    protected void setValue(Integer value) {
        this.value = value;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

同一个数据库表(本例中为 ID_GENERATOR)可以被多个表生成器使用。如果需要,例如由于 id 的类型,同一张表可以存储多个 pk 和 value 列。

TableGenerator 的名称对于持久性单元来说是全局的,就像一般的生成器名称一样。如果愿意,注释也可以定位到 id 属性。

可能的警告:如果我没记错的话,一些休眠版本组合不支持初始值。这在一般情况下不限制可移植性。只有当我们必须自动生成表并重现完全相同的一组 id 值时,这才是问题。解决方法是在建表后手动插入初始值。

【讨论】:

    【解决方案2】:

    发电机类型

    增量

    This generator supports in all the databases, database independent
    This generator is used for generating the id value for the new record by using the 
    

    序列

    Not has the support with MySql
    This generator class is database dependent it means, we cannot use this generator class for all the database, we should know whether the database supports sequence or not before we are working with it
    

    参考这个链接,可能对你有帮助。

    http://www.java4s.com/hibernate/generators-in-hibernate/

    【讨论】:

      【解决方案3】:

      您应该选择生成类型 AUTO。我只使用了 .hbm 映射,但我的理解是使用注释它应该看起来像这样:

      @Entity
      public class Employee {
          @Id
          @GeneratedValue(strategy=GenerationType.AUTO)
          private long id;
      

      【讨论】:

        猜你喜欢
        • 2016-06-09
        • 1970-01-01
        • 2019-12-16
        • 2023-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多