全局配置Hibernate以使用GenerationType.IDENTITY

时间:2018-07-02 11:39:25

标签: java spring hibernate spring-boot

自从Spring Boot 2使用Hibernate 5以来,我的MySQL 5.7数据库的@GeneratedValue默认策略GenerationType.AUTO导致GenerationType.SEQUENCE在单独的表中模拟,因为MySQL 5.7不支持序列。

我希望使用GenerationType.IDENTITY生成所有表的主ID。

是否有全局方法将其设置为默认策略,所以我不必每次在字段上使用GenerationType.IDENTITY时都必须明确选择@GeneratedValue策略?

2 个答案:

答案 0 :(得分:2)

所有实体使用同一生成器的一种简单方法是拥有一个 match_pattern: 'regex', match: 'gtinLinks|imageLink', 来定义@MappedSuperclass字段并使用所需的生成策略,然后在您的实体中扩展该类。 / p>

除了您想要实体拥有的主键之外,您还可以定义其他属性。如果您要具有不同的实体“类型”,也可以定义其他@Id类,即仅定义了pk或具有诸如@MappedSuperclasscreated之类的其他字段的实体。

updated

答案 1 :(得分:0)

您可以尝试创建自己的注释并使用它来代替@GeneratedValue

import javax.persistence.GenerationType;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomGeneratedValue {
    GenerationType strategy() default GenerationType.IDENTITY;

    String generator() default "";
}