如何正确映射@OneToMany
关系在哪里创建实体,在@One
关系的@OneToMany
一侧,要求从@Many
一侧至少有一个实体,但是在@Many
一侧的实体也需要在@One
一侧存在的实体?简单来说,这就是我的噩梦,这是我遇到的情况:
这就是我要的:[ENTITY A] 1 <-----> (1..*)[ENTITY B]
目前,我有这个:[ENTITY A] 1 <-----> (0..*)[ENTITY B]
这样很容易做到。
@OneToMany(cascade=CascadeType.ALL, mappedBy="customer")
public Set<Agreement> agreements = new HashSet<>();
和@ManyToOne
@JoinColumn(name = "CUSTOMER_ID", nullable=false)
private Customer customer;
因此,问题在于我的CUSTOMER
表没有与AGREEMENT
表相对应的列,因此仅给出Customer
时,我无法强制执行创建Agreement
的规则。目前,我只能设置给定Agreement
时创建Customer
的规则,因为AGREEMENT
表具有与CUSTOMER
表格相对应的列,这可以通过nullable=false
条件轻松完成。 最佳答案
JPA没有提供验证方法,但是Hibernate Validator可以:
@NotNull
@Size(min=1)
public Set<Agreement> agreements = new HashSet<>();
然后,您必须通过验证器手动对其进行测试:
ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
Validator validator = validatorFactory.getValidator();
validator.validate(customer)