2016-08-15 66 views
0

至于其他人,我有问题:注释@PersistenceUnit不允许这个位置

“注释@PersistenceUnit不允许这个位置”

persistence.xml看起来像这样:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> 

    <persistence-unit name="XCCAdminUnit"> 
      <jta-data-source>java:comp/env/jdbc/MyDataSource</jta-data-source> 

      <properties> 
      <property name="openjpa.LockTimeout" value="30000" /> 
      <property name="openjpa.jdbc.TransactionIsolation" value="read-committed" /> 
      <property name="openjpa.Log" value="none" /> 
      <property name="openjpa.jdbc.UpdateManager" value="operation-order" /> 
      <property name="openjpa.ConnectionDriverName" value="org.hsqldb.jdbcDriver"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

我的代码:

package XCCAdminServlet; 

import java.io.IOException; 
import javax.annotation.Resource; 
import javax.annotation.Resource.AuthenticationType; 
import javax.persistence.PersistenceUnit; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.core.Response; 

/** 
* Servlet implementation class XCCAdminMain 
*/ 
@WebServlet({"/XCCAdminMain", "/xcc-admin/rest/query", "/xcc-admin/test/query"}) 
@Resource(name = "jdbc/MyDataSource", type = javax.sql.DataSource.class, shareable = true, authenticationType = AuthenticationType.CONTAINER) 
public class XCCAdminMain extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    @PersistenceUnit(unitName = "XCCAdminUnit") 
    /** 
    * @see HttpServlet#HttpServlet() 
    */ 
    public XCCAdminMain() { 
    super(); 
    } 

    @GET 
    @Path("/{param}") 
    public Response getQuery(@PathParam("param") String msg) throws ServletException { 
    return Response.status(200).entity("Get Request received, queryparam: " + msg).build(); 
    } 



} 

我能做些什么来解决这个问题?

回答

1

您必须使用@PersistenceContext注释将EntitiyManager bean注入到您的servlet中。这个注释有unitName属性,可以如下设置:

@PersistenceContext(unitName = "XCCAdminUnit") 
private EntityManager entityManager; 
+0

该死的,这有帮助。非常感谢你! – SiriSch

+0

欢迎光临!不要忘记接受答案,请:) –

-1

使用此

@PersistenceUnit(unitName = "XCCAdminUnit") 
private EntityManager entityManager; 

所以,@PersistenceUnit标注必须注入javax.persistence.EntityManager豆。

+1

PersistenceUnit用于标注的EntityManagerFactory的,而不是一个EntityManager。 –

+0

实际上,'EntityManager'总是注入'@PersistenceContext'注释,而'@PersistenceContext'注释又具有'unitName'属性。所以你应该使用'@PersistenceContext(unitName =“XCCAdminUnit”)'注入实体管理器 –

+0

抱歉,我的错,谢谢。 –

相关问题