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/