2016-06-09 5 views
0

MySQL 데이터베이스에 액세스하는 REST 서비스가 있습니다. Wildfly 10과 MySQL 5.7.12를 사용하고 있습니다. 주입으로 EntityManager를 얻으려고하는데 테이블 내용을 매핑하는 엔티티에 대해 find 메소드를 실행할 때 다음 오류가 발생합니다. RESTService 클래스에서 Wildfly 10 지속성 MySQL 테이블을 찾을 수 없음

org.h2.jdbc.JdbcSQLException: Table "MYTABLE" not found; SQL statement:

나는

@PersistenceContext(unitName="myUnit") 
protected EntityManager entityManager; 

을 내 persistence.xml 파일은 다음과 같습니다

<?xml version="1.0" encoding="UTF-8"?> 

<persistence 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" 
    version="2.1"> 

    <persistence-unit name="myUnit"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <properties> 
     <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/mytable" /> 
     <property name="javax.persistence.jdbc.user" value="user" /> 
     <property name="javax.persistence.jdbc.password" value="pass" /> 
     <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> 

     <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" /> 
     <property name="hibernate.show_sql" value="true"/> 
     <property name="hibernate.archive.autodetection" value="class, hbm"/> 
    </properties> 
    </persistence-unit> 

</persistence> 

문제는 대신 주사를 사용하는 나는 개체를 검색하는 경우 관리자는 수동 방식으로 모든 것을 매끄럽게 사용합니다.

EntityManagerFactory emFactory; 
emFactory = Persistence.createEntityManagerFactory("myUnit"); 
EntityManager em = emFactory.createEntityManager(); 

PersistenceContext를 사용하는 방법에 대한 힌트를 제공해 주시겠습니까? 코드는 어떻게 든 더 깨끗하고 나는 그것을 사용하는 것을 선호한다.

답변

0

당신이 퍼시스턴스 유닛에 삽입 된 기본 데이터 소스를 얻고있는 것처럼 보입니다. 그래서 이것은 EntityManager가 어떻게 구축되었는지에 달려 있다고 생각합니다. 이 문제를 해결하는 한 가지 방법은 WidFly에서 데이터 소스를 만들고 지속성 단위에서 JNDI 이름을 통해 (사용하여) 사용하는 것입니다. 언제든지 버그를 신고 해 주시기 바랍니다. http://issues.jboss.org/

+0

이 데이터 소스 프로젝트를 현명하게 만들 수있는 방법이 있습니까? Wildfly 구성을 수정하고 싶지 않습니까? 다른 것들은 jboss-deployment-structure.xml에 접근 할 수있었습니다. – jlanza

0

RESOURCE_LOCAL 영속성 단위를 설정하고 있습니다. 당신은 등을 구성해야합니다

<persistence-unit transaction-type="RESOURCE_LOCAL"> 

당신의 EntityManager 만의 EntityManagerFactory를 주입 할 수없는 자원 지역 퍼시스턴스 유닛을 사용하려면. JTA 데이터 소스로 전환하고 서버가 관리하게하면 배관 작업이 훨씬 줄어 듭니다.

WF8에서 standalone.xml을 절대 편집하지 않으려면 yourdatasource-ds.xml 파일을 WEB-INF 폴더 또는 .war 파일과 함께 deployments 디렉토리에 놓을 수 있습니다. WF에서 이것을 제거하는 이야기가 있었지만 10.x에서 작동하는지 모르겠습니다.