gpt4 book ai didi

java - JPA - 在persist()之后返回自动生成的ID

转载 作者:IT老高 更新时间:2023-10-28 11:30:04 27 4
gpt4 key购买 nike

我正在使用 JPA (EclipseLink) 和 Spring。假设我有一个带有自动生成 ID 的简单实体:

@Entity
public class ABC implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;

// ...
}

在我的 DAO 类中,我有一个在此实体上调用 persist() 的插入方法。我希望该方法返回为新实体生成的 ID,但是当我测试它时,它会返回 0

public class ABCDao {
@PersistenceContext
EntityManager em;

@Transactional(readOnly=false)
public int insertABC(ABC abc) {
em.persist(abc);
// I WANT TO RETURN THE AUTO-GENERATED ID OF abc
// HOW CAN I DO IT?
return abc.id; // ???
}
}

我还有一个包装 DAO 的服务类,如果这有影响的话:

public class ABCService {
@Resource(name="ABCDao")
ABCDao abcDao;

public int addNewABC(ABC abc) {
return abcDao.insertABC(abc);
}
}

最佳答案

ID 只保证在刷新时生成。持久化一个实体只会使其“附加”到持久化上下文。因此,要么显式刷新实体管理器:

em.persist(abc);
em.flush();
return abc.getId();

或者返回实体本身而不是它的 ID。当事务结束时,会发生flush,事务外实体的用户将因此看到实体中生成的ID。

@Override
public ABC addNewABC(ABC abc) {
abcDao.insertABC(abc);
return abc;
}

关于java - JPA - 在persist()之后返回自动生成的ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9732453/

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