【发布时间】:2016-11-16 05:44:56
【问题描述】:
我有一个用于持久化实体的 Spring CrudRepository。但是,我的实体有一些我不想存储在数据库中的临时字段,但是,我不想在调用 save() 时丢失它们,但似乎我总是从保存中得到一个全新的、不同的对象() 方法。因此我失去了我的瞬时值。
如果我不使用返回的对象并继续使用我调用 save() 的原始对象,我只能调用 save() 一次,否则它会抱怨实体已被另一个会话更新.
知道如何让 save() 将我的同一个对象返回给我吗?我应该使用不同的存储库吗?我可以添加一些注释来改变行为吗?
@Override
@Transactional
public TestRun saveTestRun(TestRun run)
{
logger.debug("Saving TestRun with Id: " + run.getId() + " " + run.toString());
logger.debug("Timeout 1: " + run.getTimeout());
run.setTimeout(10000000); // set transient field
logger.debug("Timeout 2: " + run.getTimeout());
TestRun r2 = this.repository.save(run);
logger.debug("Timeout 3: " + r2.getTimeout());
logger.debug("Saved TestRun with Id: " + r2.getId() + " " + r2.toString() );
return r2;
}
这会产生:
Saving TestRun with Id: 2 TestRun@4c4d810e
Timeout 1: 90
Timeout 2: 10000000
Payload no-arg constructor
TestRun constructor
TestRun no-arg constructor
Timeout 3: 90
Saved TestRun with Id: 2 TestRun@25a14d5c
【问题讨论】:
标签: java spring hibernate spring-boot