我有一对一的关系
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn( name = "address_id" )
private Address address;
@OneToOne(mappedBy = "address")
private Customer customer;
我可以添加多个地址。例如
Customer c1 = new Customer();
Address address = new Address();
addressRepo.save(address);
Customre c2 = new Customer();
c1.setAddress(address);
customerRopesitory.save(c1);
c2.setAddress(address);
customerRopesitory.save(c2);
我希望在添加address2但jpa允许的情况下看到throw。我想在spring-jpa级别阻止它我该怎么做?
我想你的问题是"如何使用同一地址进行两次阻止";并引发异常。我认为您必须以编程方式对此进行检查,类似于Assert.isTrue(customerRepository.countByAddress(address) == 0)
。
如果将联接列设置为唯一:
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "address_id", unique = true)
private Address address;
当您尝试保存分配了相同address
实体的c2
实体时,Hibernate将抛出DataIntegrityViolationException
。