2012-07-23 37 views
1

可能重复的例子:
multiple database support for same JPA classs 需要支持MySQL和Oracle两者

我有一个表

用户(ID,姓名);

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

该id应该是自动增量。

请通过提供一些示例来帮助我实现上述目标。

在此先感谢。

+1

*你*试过了什么?你卡在哪里?你遇到什么问题? – 2012-07-23 11:55:19

+0

这可能是我个人不喜欢在Hibernate中使用注释的原因之一......最后,当涉及到更改数据库时,最终您会修改源代码而不是配置文件。 – Less 2012-07-23 11:57:04

+0

你只需写一个简单的hbm文件和Pojo到你的table.just改变方言相对于你的数据库它将适用于这两个数据库。 – NPKR 2012-07-23 11:58:11

回答

0

您应该选择生成类型AUTO。我只用.hbm映射,但我的理解是有注释它应该是这个样子的是:

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

发电机类型

增量

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 

Reffer这个环节,它可能对你有所帮助。

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

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和值列。

TableGenerator的名称对于持久性单元是全局的,因为一般的生成器名称都是。如果希望,注释也可以定位到id属性。

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