Java 需要一个同时支持mysql和oracle的示例吗

Java 需要一个同时支持mysql和oracle的示例吗,java,hibernate,jpa,Java,Hibernate,Jpa,可能重复: 我有一张桌子 用户(id、姓名) 现在,我想为表创建JPA类,以便它能够支持这两个数据库 id应该是自动递增的 请通过提供一些例子来帮助我实现同样的目标 提前感谢。发电机类型 增量 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

可能重复:

我有一张桌子

用户(id、姓名)

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

id应该是自动递增的

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

提前感谢。

发电机类型

增量

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
请参阅此链接,它可能会对您有所帮助


您应该选择自动生成类型。我只使用了.hbm映射,但我的理解是,对于注释,它应该是这样的:

@Entity
public class Employee {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private long id;
只需直接转到最便携的。它不太依赖于数据库细节,因为增加值是通过SQL完成的。我还发现它比AUTO更合适,因为相同的生成类型将独立于数据库提供程序使用。您也可以不使用它,但因为我们的目标是让它以与所有数据库完全相同的方式运行,所以我们显式地给出了所需的值

在您的情况下,映射是:

@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_生成器)。如果需要,例如由于id的类型,同一个表可以存储多个pk和value列

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


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

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