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

我有一个包含CrudRepository,实体和控制器的Spring Boot项目。我基本上是在尝试根据传递给控制器​​的数据来保留实体。

为此,我正在使用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。但是,我终生无法找出在基于代码的配置中将其设置在何处。

我意识到存在诸如JSR-303依赖项注入和Hibernate之类的问题,但这些问题都使用xml config并手动配置了持久层的各个部分。

我想要做的是“配置” Spring Boot为我创建的持久层的必需部分,因为如果定义自己的持久层,那么我将不再利用Spring

Boot的自动配置。谁能帮助我确定1)是否可行,2)我需要配置哪些部分以及如何配置?

谢谢!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值