Java 具有瞬变场的春油沉淀剂和豆类

Java 具有瞬变场的春油沉淀剂和豆类,java,spring,hibernate,spring-boot,Java,Spring,Hibernate,Spring Boot,我有一个springcrudepository,我用它来保存一个实体。然而,我的实体有一些我不想存储在数据库中的临时字段,但是,我不想在调用save()时丢失它们,但似乎我总是从save()方法中得到一个全新的、不同的对象。因此我失去了我的瞬时值 如果我不使用返回的对象,而是继续使用调用save()的原始对象,我只能对其调用save()一次,否则它会抱怨实体被另一个会话更新 知道如何让save()返回相同的对象吗?我应该使用不同的存储库吗?我可以添加一些注释来更改行为吗 @Override @T

我有一个springcrudepository,我用它来保存一个实体。然而,我的实体有一些我不想存储在数据库中的临时字段,但是,我不想在调用save()时丢失它们,但似乎我总是从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
如果我不使用返回的对象并继续使用 我调用save()的原始对象,我只能对其调用save() 一次,否则它会抱怨该实体被另一个实体更新 会议

您可以使用
saveOrUpdate(Object Object)
方法(Hibernate
session
),如果您想在多个会话中使用同一实体对象,或者另一个选项是使用
persist()
(返回类型
void
),但是使用
persist()
(生成的id将不会返回),您可以查看

您可以查找
session
API

如果我不使用返回的对象并继续使用 我调用save()的原始对象,我只能对其调用save() 一次,否则它会抱怨该实体被另一个实体更新 会议

您可以使用
saveOrUpdate(Object Object)
方法(Hibernate
session
),如果您想在多个会话中使用同一实体对象,或者另一个选项是使用
persist()
(返回类型
void
),但是使用
persist()
(生成的id将不会返回),您可以查看

您可以查找
session
API

知道如何让save()返回相同的对象吗

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

知道如何让save()返回相同的对象吗

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

Ok-因此我使用org.springframework.data.repository.crudepository与Hibernate交互。所以我很清楚,它没有persist方法,所以我需要直接获得Hibernate会话的句柄并执行save和/或persist方法?如果可以的话,尽量使用Spring提供的开箱即用的框架,但是如果我需要与Hibernate会话对话,我可以。好的-所以我使用org.springframework.data.repository.crudepository与Hibernate进行交互。所以我很清楚,它没有persist方法,所以我需要直接获得Hibernate会话的句柄并执行save和/或persist方法?如果可能的话,我只是尽量使用Spring提供的开箱即用框架,但是如果我需要与Hibernate会话对话,我可以。