java - 需要一个同时支持mysql和oracle的例子

标签 java hibernate jpa

Possible Duplicate:
multiple database support for same JPA classs

我有一张 table

用户(id,名称);

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

id 应自动递增。

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

提前致谢。

最佳答案

直接进入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 属性。

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

关于java - 需要一个同时支持mysql和oracle的例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11611984/

相关文章:

java - 在多对多 hibernate 中覆盖关系表数据

Java EE 7 + 持久性 + hibernate : Unable to persist data

java - 在 spring 中使用多对一映射时获得无限的 Json 响应

java - 数字解析库

java - 存储对象图形信息的正确方法是什么?

java - 如何在特定日期和时间运行特定方法?

java - EclipseLink + JPA + 通用实体 + SINGLE_TABLE 继承

java - 如何将文件上传集成到 Spring Data REST 存储库中?

Java排序——全部大写优先

java - 在 Spring JPA 中如何在 postgres 查询