当persistence.xml存在时,为什么持久性单元命名为null

Jba*_*ann 10 java entitymanager wildfly

我将Wildfly 8.1与包含实体的EJB项目(EJB 3.2)一起使用.当我尝试将实体管理器注入我的一个Beans时,我得到以下内容:

JBAS011440: Can't find a persistence unit named null in deployment \"EntitiesProject.jar\""},
"JBAS014771: Services with missing/unavailable dependencies" => [
    "jboss.deployment.unit.\"EntitiesProject.jar\".weld.weldClassIntrospector is missing [jboss.deployment.unit.\"EntitiesProject.jar\".beanmanager]",
    "jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO.HandleDelegate is missing [jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO]",
    "jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO.InstanceName is missing [jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO]",
    "jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO.InAppClientContainer is missing [jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO]",
    "jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO.Validator is missing [jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO]",
    "jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO.ORB is missing [jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO]",
    "jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO.ValidatorFactory is missing [jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO]"
]
Run Code Online (Sandbox Code Playgroud)

这是我的SessionBean,我尝试注入EntityManager:

@Stateless
public class MitarbeiterDAO implements MitarbeiterDAORemote {

    @PersistenceContext
    private EntityManager em;

    public int writeMitarbeiterToDB(Mitarbeiter m)
    {
        em.persist(m);
        return m.getId();
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经persistence.xml为"project-name"/ ejbModule/META-INF 指定了以下文件.

<persistence-unit name="mitarbeiter">
   <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <jta-data-source>java:jboss/datasources/MySqlDS</jta-data-source>
   <properties>
      <property-name="hibernate.hbm2ddl.auto" value="create-drop"/>
   </properties>
</persistence-unit>
Run Code Online (Sandbox Code Playgroud)

类似问题及其解决方案

更新(参见评论):
- 我试图使用@EntityManager(unitName="mitarbeiter")而不是只是@EntityManager - 上面显示的会话Bean是我尝试注入的唯一地方 EntityManager

更新2(见答案评论):

  • persistence.xml 在目录中 Project/ejbModule/META-INF/
  • 此目录包含在构建路径中
  • 不知怎的,它没有被部署,而同一目录中的其他文件是(to jar/META-INF/).如果我手动复制并粘贴它,它就可以了.这是为什么?

非常感谢任何帮助和提示.

G. *_*cki 8

一些可能的问题:

  • persistence.xml文件的位置不正确.请将其放在META-INF/存档根目录下的目录中.如果你使用maven就可以了src/main/resources/META-INF/persistence.xml.
  • persistence.xml文件无效:您的persistence-unit标签已关闭<persistence-unit name="mitarbeiter"/>(请注意/最后)
  • <property-name="hibernate.hbm2ddl.auto" value="create-drop"/>是无效的.我想你想要:<property name="hibernate.hbm2ddl.auto" value="create-drop" />
  • 您正在使用的提供程序也已弃用.

通常,persistence.xml在您的情况下,JPA 2.1 的正确内容应如下所示:

<?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="mitarbeiter">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <jta-data-source>java:jboss/datasources/MySqlDS</jta-data-source>

    <properties>
      <property name="hibernate.hbm2ddl.auto" value="create-drop" />
    </properties>
  </persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)