【问题标题】:EntityManager null when used in SEntityManager 在 S 中使用时为空
【发布时间】:2014-09-16 00:23:38
【问题描述】:

考虑以下类:

package com.deluxe.common.dao;

import javax.ejb.Stateless;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.faces.bean.ManagedBean;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import com.deluxe.jpa.Customer;

@ManagedBean(name="jpaBean")
@Stateless
@TransactionManagement(TransactionManagementType.BEAN)
public class JpaDao  {

    @PersistenceContext(unitName="EmployeeService")
    EntityManager em;

    public EntityManager getEntityManager() {
        return em;
    }


    public void addEmployee(String name, String lastName) {

        Customer cust = new Customer();

        cust.setName(name);
        cust.setLastName(lastName);

        em.persist(cust);
    }

}

当我通过 JSF 托管 bean 调用 addEmployee 时,entitymanager 为空,但是当我在 jsf bean 中打印 entitymanager 时,它会显示出来。这是jsf托管bean的代码:

@EJB JpaDao psb;

    public void addCustomer() {
        EntityManager em = psb.getEntityManager();
        JpaDao jpa = new JpaDao();
        jpa.addEmployee("Some..", "Thing..");   // Throwing err, em in JpaDao is null.
        System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"+em);  //This line show em is there.
        Customer cust = new Customer();
        cust.setLastName("Krishnawat");
        cust.setName("Nagendra");
        em.persist(cust);
    }

为什么会这样?我是不是错过了什么。

【问题讨论】:

  • 您以前使用过 EJB 吗?你为什么选择实例化你的JpaDao?

标签: hibernate jsf jpa ejb


【解决方案1】:

我看到你没有将你的 entitymanager 和你的 ejb JpaDao 声明为私有,我认为这是一个坏习惯。我认为您可以开始尝试将您的 entityManager 设置为私有,放置符合约定的相应 getter 和 setter,然后再试一次。因为我对另一个属性有一些问题,那是因为类似的事情

【讨论】:

  • 不,不是因为这个,答案是我需要将@Local 放在 bean 的顶部来指示天气它的本地或远程 bean。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
  • 2012-06-03
  • 1970-01-01
  • 2023-04-11
  • 2012-04-29
  • 2018-11-13
  • 2018-05-10
相关资源
最近更新 更多