【发布时间】:2015-04-14 09:15:23
【问题描述】:
我有两个实体
class A {
...
Integer totalSum;
Set<B> b;
}
class B {
...
Integer value;
A container;
}
我希望 a.totalSum 是每个 a.b.value 的总和;
也许最好的解决方案是在 db 中查看,但我想听 BRepository 中的更改并更新 A 记录。
我愿意:
@PostPersist
@PostUpdate
@PostRemove
private void recalculateSums(B b) {
AutowireHelper.autowire(this, this.aRepository);
AutowireHelper.autowire(this, this.bRepository);
A a = b.getContainer();
a.setTotalSum(bRepository.sumByA(s));
aRepository.save(s);
}
在 BRepository 中:
@Query("select sum(b.value) from B b where b.container = :a")
Long sumByA(@Param("a") A a);
我有错误:org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint ["PRIMARY KEY ON PUBLIC.B(ID)"; SQL statement:
insert into b (VALUE, CONTAINER_ID, ID) values (?, ?, ?)
我做错了什么?
如果我这样做
a.setTotalSum(a.getTotalSum()+1);
aRepository.save(s);
一切正常,但如果我这样做了
a.setTotalSum(a.getTotalSum()+1);
aRepository.saveAndFlush(s);
我有同样的错误。
【问题讨论】:
标签: spring hibernate jpa spring-data h2