未找到Wildfly 10持久性MySQL表

时间:2016-06-09 21:00:38

标签: mysql persistence wildfly inject

我有一个访问MySQL数据库的REST服务。我正在使用Wildfly 10和MySQL 5.7.12。我试图将EntityManager作为注入,并且在为我的实体映射表内容执行find方法时出现以下错误。

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

在RESTService类中我有

@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的提示吗?代码有点干净,我更喜欢使用它。

2 个答案:

答案 0 :(得分:0)

看起来您正在获取在持久性单元中注入的默认数据源,因此我猜这取决于EntityManager是如何构建的#39;。解决此问题的一种方法是在WidFly中创建数据源,并在持久性单元中使用它(通过)其JNDI名称。 随意报告错误http://issues.jboss.org/

答案 1 :(得分:0)

您正在设置RESOURCE_LOCAL持久性单元。你应该这样配置:

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

为了使用资源本地持久性单元,您不能注入EntityManager,只能注入EntityManagerFactory。如果切换到JTA数据源并让服务器管理它,你最终会减少很少的管道。

如果您绝对不想编辑standalone.xml,无论如何都可以在WF8中将yourdatasource-ds.xml文件放入WEB-INF文件夹,或放在.war文件旁边的deployments目录中。有人说过要从WF中删除它,所以我不知道它是否适用于10.x。