持久化后,JPA Container管理实体更新

时间:2013-03-12 11:35:46

标签: jpa

您好我在JPA中遇到了自动生成实体主键的问题。我持久化实体并尝试从中获取id值,但即使我正在刷新,它也会返回null。我正在使用最新的glassfish,JPA,netbeans,EJB 3

public class CatchesEntity implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    (...)




    @PersistenceContext(unitName = "DBF")
    private EntityManager em;

    (...)
    public void randomMethod()
    {
         CatchesEntity catchEntity = new CatchesEntity();
         em.persist(catchEntity);
         em.flush();
         System.out.println("CATCH ID: "+catchEntity.getId());

我得到了空白

1 个答案:

答案 0 :(得分:2)

调用flush()会将大部分指令发送到数据库,但不会发送INSERT上生成的commit()命令。有关详细信息,请参阅this question

您似乎正在使用容器管理的事务,因此通常在方法返回时执行提交。

如果要在方法中强制提交,可以在bean或一个方法上禁用CMT并使用UserTransaction

tx.begin();
...
em.persist();
tx.commit();