我有一个具有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);
}
}
答案 0 :(得分:0)
您可以在编译期间使用外部字节码操作框架(例如JavaAssist)添加注释。但这意味着您当然需要在编译时知道将使用哪个数据库。