Ejb 3.0 如何在EJB3的实体类中访问EntityManager
我需要执行一个db查询,以便在多对多关联表中设置额外的列“按列排序”。因此,我需要从Entity类内部访问db序列,并选择序列的下一个部分,然后将其分配给@prepersist lifecycle回调方法中的order_by列。Ejb 3.0 如何在EJB3的实体类中访问EntityManager,ejb-3.0,jpa-2.0,postgresql-9.1,Ejb 3.0,Jpa 2.0,Postgresql 9.1,我需要执行一个db查询,以便在多对多关联表中设置额外的列“按列排序”。因此,我需要从Entity类内部访问db序列,并选择序列的下一个部分,然后将其分配给@prepersist lifecycle回调方法中的order_by列。 如何从setOrderBit()中访问entitymanger?如何将Entitymanager传递给它? 或者如何在实体类中执行本机查询?您不应该在预持久化(或者通常在生命周期方法中)中使用EntityManager,因为它不符合规范: 通常,便携式应用程序的生命
如何从setOrderBit()中访问entitymanger?如何将Entitymanager传递给它?
或者如何在实体类中执行本机查询?您不应该在预持久化(或者通常在生命周期方法中)中使用EntityManager,因为它不符合规范: 通常,便携式应用程序的生命周期方法不应 调用EntityManager或查询操作,访问其他实体 实例,或修改同一持久性中的关系 上下文。[43]生命周期回调方法可能会修改post persist 对其调用的实体的非关系状态 [43]此类操作的语义在将来可能会标准化 本规范的发布
只需获得正常的JDBC连接并使用它执行查询。不建议在实体bean中注入
EntityManager
。在我看来,充当POJO的实体bean用于层或网络之间的数据传输
最好在持久化之前预先填充实体、数据操作。但是,可以在实体回调方法中对数据的属性或格式进行一些验证
在这里,您可以通过在实体上应用@EntityListeners
注释来尝试使用实体侦听器,该注释会在实体生命周期回调方法时得到通知
@Entity
public class ProductWishlist implements Serializable
{
....
@Column(name="ORDER_BIT")
private long orderBit;
// getter setter
// .......
@Prepersist
public void setOrderBit(EntityManager entityManager)
{
Query q=entityManager.createNativeQuery("select nextval('SHP_PRODUCTS_PICS_ORDER_SEQ')");
Long order=(Long)q.getResultList().get(0);
this.setOrderBit(order);
}
}