我使用Hibernate和JPAContainer。这里实体和意外行为的代码部分:
// MyEntity
@Entity
class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
private String value;
// getters and setters...
}
// set up JPAContainer
JPAContainer c = JPAContainerFactory.make(MyEntity.class, "lazyhibernate");
c.getEntityProvider().setEntityManager(null);
c.getEntityProvider().setEntityManagerProvider(entityManagerProvider);
c.getEntityProvider().setLazyLoadingDelegate(new HibernateLazyLoadingDelegate());
final BeanItem<MyEntity> item = new BeanItem<MyEntity>(new MyEntity());
fill(item); // fill item fields...
MyEntity e = item.getBean();
c.addEntity(e);
c.commit();
System.out.println(e.getId()); // return null
如何获取新创建的实体的ID?
答案 0 :(得分:0)
只要您不对容器进行提交,就可以从JPAContainer获取UUID作为ItemID。否则(在提交之后)使用数据库给出的ID再次检索您的EntityID(EntityItem)。
UUID uuid = (UUID) c.addEntity(e);
EntityItem<MyEntity> itemUncommitted = c.getItem(uuid) // here you use the UUID to retrieve the Entity
c.commit();
EntityItem<MyEntity> itemCommited = c.getItem(e.getId()); // here you use the ID of the DB
但我建议你忘掉JPAContainer。它很方便,但有太多问题。 我建议您通过辅助类,EJB等创建服务层。您可以在UI代码中隐藏JPA-Functions。