您好我在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());
我得到了空白
答案 0 :(得分:2)
调用flush()
会将大部分指令发送到数据库,但不会发送INSERT
上生成的commit()
命令。有关详细信息,请参阅this question。
您似乎正在使用容器管理的事务,因此通常在方法返回时执行提交。
如果要在方法中强制提交,可以在bean或一个方法上禁用CMT并使用UserTransaction
:
tx.begin();
...
em.persist();
tx.commit();