Java 初始化数据库中的不可变JPA集合

Java 初始化数据库中的不可变JPA集合,java,spring,jpa,spring-data-jpa,Java,Spring,Jpa,Spring Data Jpa,我的域包含FieldValidator对象,这些对象具有子类EmailValidator、SizeValidator等。每个子类只有一个FieldValidator实例 @Entity @Immutable @Table(name = "FIELD_VALIDATOR") @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = "TYPE") public abstract class F

我的域包含FieldValidator对象,这些对象具有子类EmailValidator、SizeValidator等。每个子类只有一个FieldValidator实例

@Entity
@Immutable
@Table(name = "FIELD_VALIDATOR")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "TYPE")
public abstract class FieldValidator extends AbstractEntity implements IFieldValidator{

    @Column(unique=true, name="TYPE")
    public String type;

    public String name;
    public String argumentName;

    //To override by subclasses
    public abstract Optional<CustomError> run(FieldConstraint constraint);

    /**
    * Constructor, getters and setters omitted
    */
}
@实体
@不变的
@表(name=“FIELD\u VALIDATOR”)
@继承(策略=InheritanceType.SINGLE_表)
@鉴别器列(name=“TYPE”)
公共抽象类FieldValidator扩展AbstractEntity实现IFieldValidator{
@列(unique=true,name=“TYPE”)
公共字符串类型;
公共字符串名称;
公共字符串参数名;
//用子类覆盖
公共摘要可选运行(FieldConstraint);
/**
*省略构造函数、getter和setter
*/
}
示例子类

@Entity
@DiscriminatorValue("DATE_BEFORE")
public class DateBeforeValidator extends FieldValidator {
    public DateBeforeValidator() {
        super("Date", "Before");
    }

    public Optional<CustomError> run(FieldConstraint constraint) {
        //TODO
    }
}
@Entity
@DiscriminatorValue("SIZE_MIN")
public class SizeMinValidator extends FieldValidator {

    public SizeMinValidator() {
        super("Size", "Minimum");
    }

    public Optional<CustomError> run(FieldConstraint constraint) {
        //TODO
    }
}
@实体
@鉴别器值(“日期前”)
公共类DateBeforeValidator扩展了FieldValidator{
公共DateBeforeValidator(){
超级(“日期”、“之前”);
}
公共可选运行(FieldConstraint){
//待办事项
}
}
示例子类

@Entity
@DiscriminatorValue("DATE_BEFORE")
public class DateBeforeValidator extends FieldValidator {
    public DateBeforeValidator() {
        super("Date", "Before");
    }

    public Optional<CustomError> run(FieldConstraint constraint) {
        //TODO
    }
}
@Entity
@DiscriminatorValue("SIZE_MIN")
public class SizeMinValidator extends FieldValidator {

    public SizeMinValidator() {
        super("Size", "Minimum");
    }

    public Optional<CustomError> run(FieldConstraint constraint) {
        //TODO
    }
}
@实体
@鉴别器值(“大小\最小值”)
公共类SizeMinValidator扩展了FieldValidator{
公共验证程序(){
超级(“尺寸”、“最小值”);
}
公共可选运行(FieldConstraint){
//待办事项
}
}

如何使用每个FieldValidator子类一个实体初始化FIELD_VALIDATOR表?我需要确保:FIELD_VALIDATOR表是不可变的(不能在表中添加或删除其他数据),每个FieldValidator实体都是唯一的和不可变的(@Column(unique=true)和@immutable注释应该起作用)。

我认为最好的选择是JPAs/Hibernates初始加载功能。例如,您可以阅读它。

我认为您最好的选择是JPAs/Hibernates初始加载功能。例如,你可以读到它