【发布时间】:2018-11-26 09:24:47
【问题描述】:
我有一个名为 main_project 的项目(使用 spring-boot v2),其中包含所有配置类,包括 JPA 配置。 main_project 也有实体类(如 User、Personnel)。
main_project中托管实体类的JPA配置如下:
@Entity
public abstract class MainEntity<T extends Serializable> {
@Id
@GeneratedValue(GenerationType=?)
@Column(name = "id")
private T id;
}
@Entity
public class Personnel extends MainEntity<Long> {
@Column(name = "firstName")
private String firstName;
// other proprties
}
其他项目正在使用 main_project 作为引导的依赖项。其他依赖于 main_project 的项目可以使用 Personnel 或 User 和 ... 实体,它们可以有不同的 DBMS,例如 MySQL 或 Oracle。 p>
当我使用 main_project 作为项目 A 中的依赖项时,A 项目extends MainEntity<?> 的实体类并创建它自己的实体类和拥有自己的数据库配置文件。
我的问题在于 main_project 中 id 属性的 DBMS 类型和 GenerationType。
-
1)A项目使用Mysql数据库时,MainEntity必须有:
@GeneratedValue(strategy = GenerationType.IDENTITY) -
2)A项目使用Oracle数据库时,MainEntity必须有:
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "id_generator")@SequenceGenerator(name="id_generator", sequenceName = "id_seq", allocationSize=1)
项目 A 如何检测其数据库类型并在上述方法之间切换?
我认为我需要在运行时反映 java util,并根据数据库类型添加一些注释!对吗?
我也读过,this_post_19875993,但没有帮助。
this_post_30731627 解释说我们可以选择自定义 GenerationType 之一,但我想自动选择而不对 main_project 进行任何更改,因为 A project 不能改变 main_project 的 MainEntity 类,只能使用它。
【问题讨论】:
-
@vlad-mihalcea 你的想法是什么?
标签: java spring hibernate jpa hibernate-entitymanager