Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring更新实体与在同一事务中创建的实体_Spring_Hibernate_Jpa - Fatal编程技术网

Spring更新实体与在同一事务中创建的实体

Spring更新实体与在同一事务中创建的实体,spring,hibernate,jpa,Spring,Hibernate,Jpa,我创建了一个实体,我想将新创建的实体保存为另一个对象的一部分。但是,当我运行代码时,没有错误,但是该值没有保存在数据库中 下面是创建实体并将其存储在另一个实体中的代码 Info persisted = infoService.create(info); account.setInfo(persisted); update(account); 要更新的代码如下所示: @Override public void update(final T entity) { Preconditions.

我创建了一个实体,我想将新创建的实体保存为另一个对象的一部分。但是,当我运行代码时,没有错误,但是该值没有保存在数据库中

下面是创建实体并将其存储在另一个实体中的代码

Info persisted = infoService.create(info);
account.setInfo(persisted);
update(account);
要更新的代码如下所示:

@Override
public void update(final T entity) {
    Preconditions.checkNotNull(entity);

    getDao().save(entity);
}
@Transactional
public <S extends T> S save(S entity) {

    if (entityInformation.isNew(entity)) {
        em.persist(entity);
        return entity;
    } else {
        return em.merge(entity);
    }
}
保存方法如下所示:

@Override
public void update(final T entity) {
    Preconditions.checkNotNull(entity);

    getDao().save(entity);
}
@Transactional
public <S extends T> S save(S entity) {

    if (entityInformation.isNew(entity)) {
        em.persist(entity);
        return entity;
    } else {
        return em.merge(entity);
    }
}
@Transactional
公共存储(S实体){
if(entityInformation.isNew(实体)){
em.persist(实体);
返回实体;
}否则{
返回em.merge(实体);
}
}

我哪里出错了?

在执行
持久化
更新
之后,您应该
刷新实体
,以便将持久化上下文与文档中提到的基础数据库同步, 然后您可以创建一个名为saveAndFlush的方法并调用您的方法,以后您可以这样使用:

@Transactional
public <S extends T> S saveAndFlush(S entity) {

    S result = save(entity);
    em.flush();

    return result;
}
@Transactional
公共存储和刷新(S实体){
S结果=保存(实体);
em.flush();
返回结果;
}