当前位置: 首页 > 知识库问答 >
问题:

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

谭池暝
2023-03-14

我正在使用WildFly8.1和一个包含实体的EJB项目(EJB3.2)。当尝试将实体管理器注入到我的一个bean中时,我得到了以下信息:

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]"
]

这是我尝试注入EntityManager的SessionBean:

@Stateless
public class MitarbeiterDAO implements MitarbeiterDAORemote {

    @PersistenceContext
    private EntityManager em;

    public int writeMitarbeiterToDB(Mitarbeiter m)
    {
        em.persist(m);
        return m.getId();
    }
}

我指定了以下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>

类似问题及其解决方法

  • 找不到持久性单元建议包含persistence.xml
  • 在Wildfly/Jboss中注入entityManager指出,我的persistence.xml可能属于另一个目录。我尝试了那个目录,但仍然得到相同的错误消息
  • 无法从persistence.xml中找到持久性单元,但这不是完全相同的问题,解决方案是向persistence.xml添加 ,但这对我也不起作用

更新(请参阅注释):
-我尝试使用@EntityManager(unitname=“mitarbeiter”)而不是仅仅使用@EntityManager-上面显示的会话Bean是我尝试注入EntityManager的唯一地方

更新2(见答案注释):

  • persistence.xml位于project/ejbmodule/meta-inf/
  • 目录中
  • 此目录包含在生成路径中
  • 在同一目录中的其他文件被部署的时候,它却没有被部署(到jar/meta-inf/)。如果我手工复制和粘贴它,它的工作。为什么?

非常感谢任何帮助和暗示。

共有1个答案

单于高逸
2023-03-14

几个可能的问题:

  • persistence.xml文件的位置不正确。请将其放在存档根目录的meta-inf/目录中。如果您使用maven,它应该是src/main/resources/meta-inf/persistence.xml.
  • 无效的persistence.xml文件:您的persistence-unit标记关闭在 行(请注意结尾处的/
  • 无效。我想您需要:
  • 您使用的提供程序也不推荐使用。

通常,在您的示例中,JPA 2.1的正确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="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>

 类似资料:
  • 我试图使用EJB 3.1、JPA 2.0、M2E-WTP和JSF 2.1技术在WebLogic12c服务器上运行我的webapp,但仍然出现以下错误: 这是触发异常的EJBBean 下面是persistence.xml文件,它位于eclipse构建的src/main/java-->META-INF下。 我花了几个小时在网上寻找答案,但没有结果。我不明白为什么我的persistence.xml中的持

  • 使用Spring Core 3.0.5,Hibernate 3.6.0。这个问题的标题是在启动Tomcat网络服务器(6.0.29)时使用我正在维护的应用程序时提出的java.lang.IllegalStateExcture的消息。 应用程序上下文。xml表示: 坚持不懈xml位于项目包含的jar文件的META-INF目录中。驱逐异见者。网状物war有一个WEB-INF/classes文件夹,其中

  • 我正在使用Eclipse和WildFly11开发一个基于maven的JSF+JPA+EJB3.2项目。启动应用程序服务器时,我收到以下错误: 我正在无状态bean中注入EntityManager: 为什么容器找不到persistence.xml文件?persistence.xml存在于META-INF目录中。如有任何帮助,我们将不胜感激。多谢了。 更新:这里是项目目录结构,persistence.

  • 这是我的坚持课: 这是我的persistence.xml:

  • 我试图建立一个gradle任务,运行一个旨在生成SQL模式的java主类。 我没有毅力。xml配置文件。 以下是我的配置和代码: 我的gradle任务: 我的导出实用程序: 我的数据配置: 以下是我得到的一个例外: 编辑:我确实收到了警告:

  • 问题内容: 我有以下查询: 这两者有什么区别? 所有数据库都支持这两种方法吗? JPA TransactionManager和JTA TransactionManager是否不同? 问题答案: JPA实现可以选择自己管理事务(RESOURCE_LOCAL),或由应用程序服务器的JTA实现管理事务。 在大多数情况下,RESOURCE_LOCAL是可以的。这将使用基本的JDBC级事务。缺点是该事务对于