我有一个Spring CrudRepository,我用来坚持一个实体。但是,我的实体有一些暂时的字段,我不想将它们存储在数据库中,但是,当我调用save()时,我不想丢失它们,但是看起来我总是从保存中得到一个全新的,不同的对象() 方法。因此我失去了我的短暂价值。spring - CrudRepository和豆与瞬态字段
如果我不使用返回的对象并继续使用我调用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 [email protected]
Timeout 1: 90
Timeout 2: 10000000
Payload no-arg constructor
TestRun constructor
TestRun no-arg constructor
Timeout 3: 90
Saved TestRun with Id: 2 [email protected]
好的 - 所以我使用org.springframework.data.repository.CrudRepository来与Hibernate进行交互。所以我很清楚,它没有持久化方法,所以我需要直接处理Hibernate Session并执行保存和/或持久化方法? 只要尽可能地尽量使用Spring提供的开箱即用框架,但是如果我需要与Hibernate会话交谈,我可以。 –