如何在不使用注释的情况下获取JavaEE 6中的容器管理实体管理器

时间:2015-09-08 07:42:54

标签: java jpa persistence java-ee-6

如何在不使用注释的情况下在JavaEE 6中获取容器管理实体管理器

2 个答案:

答案 0 :(得分:2)

您可以尝试使用JNDI获取实体管理器,如下所述:http://docs.oracle.com/cd/E16439_01/doc.1013/e13981/usclient005.htm#CIHFIDHI

另请参阅JPA spec的第7.2节(“获取EntityManager”)。

答案 1 :(得分:0)

我发现这个解决方案适用于Glassfish 3.1(感谢Thomas的链接):

@Stateless
@PersistenceContext(unitName = "myUnit", name="persistence/myUnit")
public class MyLibraryService {

   @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
   public String getFirstName(String userId) {
     EntityManager em = (EntityManager) new InitialContext().lookup("java:comp/env/persistence/myUnit");

     TypedQuery<String> tq = em.createQuery("select fn from Person p where p.id = :userId", String.class);
     tq.setParameter("userId", userId);
     ...
   }

}

其中myUnitpersistence.xml中定义的单位名称。

MyLibraryService可以简单地注入其他类:

@Inject
private MyLibraryService myLibraryService;