【发布时间】:2014-04-27 07:45:43
【问题描述】:
我有以下服务:
@Service
public class CamelService {
@Transactional
public aCamelThing() {
Camel camel = this.camelRepository.findOne(1);
System.out.println(camel.getCamelName()); // prints "normalCamel"
// simple hql set field 'camelName'
int res = this.camelRepository.updateCamelName(1,"superCamel!");
Camel camelWithNewName = this.camelRepository.findOne(1);
System.out.println(camelWithNewName .getCamelName()); // prints "normalCamel" ?!?!?
}
}
知道如何实现第二个 println 将打印的目标:“superCamel!” ? (将第二次调用与新事务分开并不理想)。
【问题讨论】:
-
不确定您的 updateCamelName 在做什么(可能发出 HQL 查询?)。但是您至少需要刷新您的更改并可能清除存储库,否则您将获得已检索的实体。另外,您为什么不简单地用名称更新
camel并存储它?! -
除了 M. Deinum 所说的 updateCamelName 还应该提交事务。方法是否用@Transactional注解
-
Deinum,我尝试了 camelRepository.flush() 但最后一次发现仍然没有带来新名称。为什么我不简单地更新对象?我的现实生活用例比我发布的要复杂得多,这只是为了简单起见。 Dhanush,该方法是事务性的,那么为什么要存储库呢?
标签: java spring jpa spring-data