java项目禁用hibernate_java – 如何在Spring Boot项目中禁用Hibernate验证

我有一个弹簧引导项目,它有一个CrudRepository,一个实体和一个Controller.我基本上试图根据传递给控制器​​的数据来持久化一个实体.

为此,我使用spring-boot-starter-jpa.我的实体使用JSR-303注释进行注释,这些注释在将数据传递到CrudRepository以进行持久性之前在控制器中进行检查.

控制器方式:

@RequestMapping(value = "users", method = { RequestMethod.POST })

public SuccessfulResponse addUser(@Valid @RequestBody User user, BindingResult validation) {

if (validation.hasErrors()) {

throw new ValidationException(validation);

}

User saved = this.users.save(user);

return new SuccessfulResponse(saved);

}

实体:

@Entity /* JPA */

public class User {

@Id /* JPA */

@Column(name="email_address", nullable=false, length=255) /* JPA */

@UserUnique

private String emailAddress;

}

我的问题的原因是UserUnique注释.它的验证器如下所示:

public class UserUniqueValidator implements ConstraintValidator {

private UserRepository users;

@Autowired

public UserUniqueValidator(UserRepository users) {

this.users = users;

}

@Override

public void initialize(UserUnique annotation) {}

@Override

public boolean isValid(String value, ConstraintValidatorContext context) {

return users.findOne(value) == null;

}

}

似乎正在发生的事情是,验证正在运行两次.一旦通过@Valid注释在控制器中,并且一旦Hibernate尝试持久化对象.但是,当Hibernate尝试保留对象时,它会抛出:

javax.validation.ValidationException: HV000064: Unable to instantiate ConstraintValidator: class test.UserUniqueValidator`

这似乎是因为它不是弹簧感知,并且不能将依赖注入到构造函数中.所以,我想做的是完全禁用Hibernate验证(作为其冗余并已在控制器中发生).

似乎有一个名为javax.persistence.validation.mode的属性,您可以将其设置为none.但是,我无法为我的生活找出在基于代码的配置中设置它的位置.

我想做的是“后配置”Spring Boot为我创建的持久层所需的部分,因为如果我定义了自己的,那么我不再使用Spring Boot的自动配置.任何人都可以帮我确定是否1)这是可能的和2)哪些部分我需要配置和如何?

谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值