У меня есть абстрактный базовый класс сущности со свойством id
.
Я бы хотел, чтобы к этому свойству применялись специальные аннотации, если текущая база данных H2:
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = id_generator")
@Column(name = "id")
private Long id;
И некоторые другие конкретные аннотации, применяемые к этому свойству, если текущая база данных - MySQL:
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "native")
@GenericGenerator(name = "native", strategy = "native")
@Column(name = "id")
private Long id;
Базовый класс:
@MappedSuperclass
public abstract class AbstractEntity {
Все классы сущностей расширяют базовый класс, как:
@Entity
@Table(name = "user_account")
@SequenceGenerator(name = "id_generator", sequenceName = "sq_id_user")
public class User extends AbstractEntity {
Может быть, я мог бы использовать некоторые условные пользовательские аннотации?
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Conditional(DbH2Condition.class)
public @interface DbH2 {
}
public class DbH2Condition implements Condition {
private static final String DB = "h2";
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return context.getEnvironment().getProperty("db") == null
|| context.getEnvironment().getProperty("db").equals(DB);
}
}