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

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

@Entity

public class ABC implements Serializable {

@Id

@GeneratedValue(strategy=GenerationType.IDENTITY)

private int id;

// ...

}

在我的DAO类中,我有一个调用persist()此实体的insert方法。我希望该方法为新实体返回生成的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。当事务结束时,将发生刷新,事务外部实体的用户将因此在实体中看到生成的ID。

@Override

public ABC addNewABC(ABC abc) {

abcDao.insertABC(abc);

return abc;

}

以上是 JPA-在persist()之后返回自动生成的ID 的全部内容, 来源链接: utcz.com/qa/404249.html

回到顶部