我有一个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
答案 0 :(得分:0)
如果我不使用返回的对象并继续使用我的 我调用save()的原始对象,我只能调用save() 曾经,否则它抱怨实体被另一个更新 会话。
如果您想在多个会话中使用相同的实体对象,或者另一个选项是使用saveOrUpdate(Object object)
(返回类型{{},则可以使用session
方法(Hibernate persist()
) 1}}),但void
(不会返回生成的ID),您可以查看here
您可以查看persist()
API的here。
答案 1 :(得分:0)
知道如何让save()返回我的同一个对象吗?
import hashlib
hashlib.sha1(userinput).hexdigest()
将仅返回生成的save(object)
,而不是您传递给它的对象。
因此,获取identifier
方法返回的identifier
,然后在需要该ID时手动将其设置为对象。