Hibernate 如何在一对多映射中强制实施关系集合的最小/最大/精确大小
我有这样一个类的工作代码:Hibernate 如何在一对多映射中强制实施关系集合的最小/最大/精确大小,hibernate,jpa,spring-data-jpa,hibernate-mapping,Hibernate,Jpa,Spring Data Jpa,Hibernate Mapping,我有这样一个类的工作代码: @Entity class User { @ManyToMany @JoinTable(...) List<RoleA> aRoles; @ManyToMany @JoinTable(...) List<RoleB> bRoles; @OneToMany @JoinTable(...) List<Address> addresses; } @实体 类用户{ @许多 @可接合(…) 罗列阿罗莱
@Entity
class User {
@ManyToMany
@JoinTable(...)
List<RoleA> aRoles;
@ManyToMany
@JoinTable(...)
List<RoleB> bRoles;
@OneToMany
@JoinTable(...)
List<Address> addresses;
}
@实体
类用户{
@许多
@可接合(…)
罗列阿罗莱斯;
@许多
@可接合(…)
罗尔斯;
@独身癖
@可接合(…)
列出地址;
}
我知道如何通过nullable属性强制至少1。
然而,我感兴趣的是,是否可以添加JPA(而不是数据库)检查、约束或验证,以强制执行关系中实体的最小/最大/精确数量
例如,最多3个地址和最多10个角色A和最少2个角色B。Bean验证规范(JSR-303)的一部分是@Size注释: 支持的类型有字符串、集合、映射和数组。检查注释的图元大小是否介于最小值和最大值(包括最小值和最大值)之间 您可以验证集合:
@ManyToMany
@Size(max=10)
List<RoleA> aRoles;
@ManyToMany
@Size(min=2)
List<RoleB> bRoles;
@OneToMany
@Size(max=3)
List<Address> addresses;
@manytomy
@尺寸(最大值=10)
罗列阿罗莱斯;
@许多
@尺寸(最小值=2)
罗尔斯;
@独身癖
@尺寸(最大值=3)
列出地址;
从未尝试过这种方法,本能地我会用商业代码检查它。我接受了@antoine.lange,因为它本质上就是我所寻找的
class User {
@ManyToMany
@Size(min=1, max=1)
List<RoleA> aRoles;
}
这个函数执行(并抛出ConstraintViolationException):
我正在用业务代码检查这一点,但是我更喜欢JPA映射和我的DB(在本例中我不控制它)防弹。我会试试你的建议。
existingUser.getARoles().add(role1);
existingUser.getARoles().add(role2);
userRepository.saveAndFlush(existingUser);
user.setName(newName);
existingUser.getARoles().add(role1);
existingUser.getARoles().add(role2);
userRepository.saveAndFlush(existingUser);