gpt4 book ai didi

Hibernate 4 (Jboss as 7) 无法自动检测实体并插入 PersistenceUnit,导致 `unknown entity` 异常

转载 作者:行者123 更新时间:2023-12-01 04:09:19 25 4
gpt4 key购买 nike

我遇到了类似的问题 How to auto-register entities with JPA/Hibernate: Unknown entity .

我使用 jboss 作为 7,hibernate 4(与 jboss 作为 7 一起使用),spring 3.0.5。
我用 @Entity 注释我的实体类.
并使用 org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean生成 entityManager。以下是bean定义:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:jboss/datasources/appsubmission" />
</bean>

<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="persistenceUnitName" value="app_sub_jpa" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="false" />
</bean>
</property>
</bean>

下面是persistence.xml文件:
<?xml version="1.0" encoding="UTF-8"?>

<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

<persistence-unit name="app_sub_jpa">
<description>Hibernate for JPA</description>
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<non-jta-data-source>java:jboss/datasources/myds</non-jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
</properties>
</persistence-unit>
</persistence>

一切顺利,直到我尝试访问数据库,例如:
entityManager.persist(myEntity);

它抛出一个异常,说“MyEntity”是未知实体。

Spring 3..0.5 + hierbnate 3.6.6.final + jboss as 7 Database access ,Matt告诉我在我的persistence.xml文件中添加元素,问题就解决了。 但问题是,在另一个项目中,我使用了类似的配置(相同的persistence.xml和类似的bean定义),一切顺利,没有unknown entity抛出异常。正如我所记得的,<class>在persistence.xml 文件中不需要,因为jboss/hibernate 会用@Entity 扫描类注释并将其添加到 PU 中。

我开启了TRACE级别的日志,在两个项目中,jboss as 7好像创建了两个persistenceUnit,都是一样的。
PersistenceUnitMetadata(version=2.0) [
name: app_sub_jpa
jtaDataSource: null
nonJtaDataSource: java:jboss/datasources/myds
transactionType: JTA
provider: org.hibernate.ejb.HibernatePersistence
classes[
]
packages[
]
mappingFiles[
]
jarFiles[
]
validation-mode: AUTO
shared-cache-mode: UNSPECIFIED
properties[
hibernate.dialect: org.hibernate.dialect.MySQLDialect
]]

11:23:45,127 DEBUG [org.hibernate.ejb.Ejb3Configuration] (MSC service thread 1-3) Processing PersistenceUnitInfo [
name: app_sub_jpa
persistence provider classname: org.hibernate.ejb.HibernatePersistence
classloader: ModuleClassLoader for Module "deployment.admin.war:main" from Service Module Loader
Temporary classloader: org.jboss.as.jpa.classloader.TempClassLoader@28e13c84
excludeUnlistedClasses: false
JTA datasource: null
Non JTA datasource: org.jboss.jca.adapters.jdbc.WrapperDataSource@5b4c1313
Transaction type: JTA
PU root URL: vfs:/D:/Server/jboss-as-7.0.0.Final/bin/content/admin.war/WEB-INF/classes/
Shared Cache Mode: UNSPECIFIED
Validation Mode: AUTO
Jar files URLs []
Managed classes names []
Mapping files names []
Properties [
hibernate.dialect: org.hibernate.dialect.MySQLDialect]

最佳答案

Hibernate 在 {persistenceUnit.root}/META-INF/persistence.xml 中找到了 persistence.xml ,因此它应该扫描 {persistenceUnit.root} 以查找带注释的类。

如果您的persistence.xml 在别处,您将需要添加<class>手动元素,或指定 <jar-file>包含实体。

关于Hibernate 4 (Jboss as 7) 无法自动检测实体并插入 PersistenceUnit,导致 `unknown entity` 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7339331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com