Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ejb 3.0 如何在EJB3的实体类中访问EntityManager_Ejb 3.0_Jpa 2.0_Postgresql 9.1 - Fatal编程技术网

Ejb 3.0 如何在EJB3的实体类中访问EntityManager

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,因为它不符合规范: 通常,便携式应用程序的生命

我需要执行一个db查询,以便在多对多关联表中设置额外的列“按列排序”。因此,我需要从Entity类内部访问db序列,并选择序列的下一个部分,然后将其分配给@prepersist lifecycle回调方法中的order_by列。

如何从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);

}
}