在将具体类对象持久化到db时,必须使Abstract类中的字段为强制性

问题描述 投票:0回答:1
public abstract class Parent{
  @NotNull
  private String appId;
}

@Documnet
public class child1 extends Parent{
  @Id
  private String id;
  ...more fields
  ...getters setters
}

@Documnet
public class child2 extends Parent{
  @Id
  private String id;
  ...more fields
  ...getters setters
}

我想确保每次在mongodb appId字段中保留Child1或Child2时都具有一个有效值,否则我希望我的代码抛出一些异常或错误。

我不想每次都对appId具有值进行显式检查。这应该是一次性的事情,您只需配置一次即可,并且在扩展父类的每个类中都会体现出来

我正在使用spring-boot和mongodb作为数据库。

ependencies {
  implementation 'org.springframework.boot:spring-boot-starter-web'
  implementation 'io.springfox:springfox-swagger2:2.9.2'
  implementation 'io.springfox:springfox-swagger-ui:2.0.1'
  implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'

  testImplementation 'org.springframework.boot:spring-boot-starter-test'

  compile group: 'org.springframework.boot', name: 'spring-boot-starter-security', version: '2.2.6.RELEASE'
  compile('org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.0.6.RELEASE')
  compile('org.glassfish.jaxb:jaxb-runtime:2.3.1')

  compileOnly "org.projectlombok:lombok:${lombokVersion}"
  annotationProcessor "org.projectlombok:lombok:${lombokVersion}"
}
java mongodb spring-boot inheritance multiple-inheritance
1个回答
0
投票

这里我如何解决此问题,不确定这是否是具体解决方案

public abstract class Parent {
    @NotNull
    private String appId;
}

@Document
public class Child extends Parent{

    @Id
    private String id;

}

ValidatingMongoEventListener]和LocalValidatorFactoryBean创建豆

@Configuration
public class SomeClass {

    @Bean
    public ValidatingMongoEventListener createValidatingMongoEventListenerBean(LocalValidatorFactoryBean localValidatorFactoryBean){
            return  new ValidatingMongoEventListener(localValidatorFactoryBean);
    }

    @Bean
    public LocalValidatorFactoryBean createLocalValidatorFactoryBean(){
        return  new LocalValidatorFactoryBean();
    }

}

现在,如果我们尝试保留扩展了[[Parent

类但没有appIdChild类,它将抛出ConstraintViolationException
© www.soinside.com 2019 - 2024. All rights reserved.