gpt4 book ai didi

java - spring - CrudRepository 和带有 transient 字段的 beans

转载 作者:太空宇宙 更新时间:2023-11-04 12:03:51 24 4
gpt4 key购买 nike

我有一个 Spring CrudRepository,用于保存实体。但是,我的实体有一些我不想存储在数据库中的 transient 字段,但是,我不想在调用 save() 时丢失它们,但似乎我总是从 save() 方法返回一个全新的、不同的对象。因此我失去了短暂的值(value)观。

如果我不使用返回的对象,而只是继续使用我调用 save() 的原始对象,我只能对其调用 save() 一次,否则它会提示实体已被另一个 session 更新。

知道如何让 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

最佳答案

Any idea how to either get save() to return me my same object back?

save(object) 将仅返回生成的identifier,而不是您传递给它的对象。因此,获取 save 方法返回的 identifier,然后如果需要该 id,则手动将其设置为对象。

关于java - spring - CrudRepository 和带有 transient 字段的 beans,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40624871/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com