0

我使用 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?

4

1 回答 1

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 功能。

于 2016-02-23T09:22:26.617 回答