2016-08-15 68 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

抱歉,我的錯,謝謝。 –

相關問題