Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我需要<;类别>;persistence.xml中的元素?_Java_Hibernate_Orm_Jpa_Annotations - Fatal编程技术网

Java 我需要<;类别>;persistence.xml中的元素?

Java 我需要<;类别>;persistence.xml中的元素?,java,hibernate,orm,jpa,annotations,Java,Hibernate,Orm,Jpa,Annotations,我有一个非常简单的persistence.xml文件: pl.michalmech.eventractor.domain.User pl.michalmech.eventractor.domain.Address pl.michalmech.eventractor.domain.City pl.michalmech.eventractor.domain.Country 它是有效的 但当我删除元素时,应用程序看不到实体(所有类都用@Entity注释) 是否有任何自动机制来扫描@Entity类?

我有一个非常简单的persistence.xml文件:


pl.michalmech.eventractor.domain.User
pl.michalmech.eventractor.domain.Address
pl.michalmech.eventractor.domain.City
pl.michalmech.eventractor.domain.Country
它是有效的

但当我删除
元素时,应用程序看不到实体(所有类都用
@Entity
注释)


是否有任何自动机制来扫描
@Entity
类?

persistence.xml有一个可以使用的
jar文件。发件人:


该部门管理订单和客户。
它不依赖于任何特定于供应商的功能,并且可以
因此,可以将其部署到任何持久性提供程序。
jdbc/MyOrderDB
MyOrderApp.jar
com.widgets.Order
com.widgets.Customer
该文件定义了一个持久性单元 名为
OrderManagement
,使用 支持JTA的数据源
jdbc/MyOrderDB
jar文件
class
元素指定托管持久性类:实体类、可嵌入类和映射超类。
jar file
元素指定对包含托管持久性类的打包持久性单元可见的jar文件,而
class
元素显式命名托管持久性类

对于Hibernate,请查看too以了解更多详细信息

编辑:实际上,如果您不介意不遵守规范,Hibernate甚至在JavaSE中也支持自动检测。为此,请添加
hibernate.archive.autodetection
属性:

<property name="hibernate.archive.autodetection" value="class, hbm"/>

Java SE环境中,按照规范,您必须指定所有类,就像您所做的那样:

必须在JavaSE环境中指定所有命名的托管持久性类的列表,以确保可移植性

如果不希望持久性单元根中包含的带注释的持久性类包含在持久性单元中,则应使用exclude unlisted classes元素。exclude unlisted classes元素不适用于JavaSE环境

(JSR-000220 6.2.1.6)

Java EE环境中,当提供者为您扫描注释时,您不必这样做

非正式地,您可以尝试在persistence.xml中设置
false
。此参数在EE中默认为
false
,在SE中默认为
true
。据我所知,两者都支持这一点。但正如上面所述,根据规范,您不应该依赖它在SE中工作

您可以尝试以下操作(可能在SE环境中工作,也可能不工作):


假的

Hibernate不支持SE下的
false
(另一张海报提到了TopLink和EclipseLink的这一功能)


有一些工具可以自动生成persistence.xml的类列表,例如IntelliJ中的导入数据库架构向导。一旦在persistence.xml中获得了项目的初始类,随着项目的进展,手动添加/删除单个类应该很简单。

这不是一个解决方案,而是对使用Spring的人的提示:

我试图将
org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean
与设置
persistenceXmlLocation
一起使用,但我必须提供
元素(即使
persistenceXmlLocation
只是指向
META-INF/persistence.xml


不使用
persistenceXmlLocation
时,我可以省略这些
元素。

对于那些在Spring中运行JPA的人,从3.1版开始,你可以在
LocalContainerEntityManagerFactoryBean
下设置
packagesToScan
属性,并完全去掉persistence.xml


不确定您是否正在做与我正在做的类似的事情,但我正在使用Maven在单独的组件中使用JAXB从XSD生成一个源java负载。假设此工件称为“基本模型”

我想导入这个包含java源代码的工件,并在我的“基本模型”工件jar中的所有类上运行hibernate,而不是显式地指定每个类。我添加了“基本模型”作为hibernate组件的依赖项,但问题是persistence.xml中的标记只允许指定绝对路径

我绕过它的方法是将我的“基本模型”jar依赖项显式地复制到我的目标目录,并剥离它的版本。因此,如果我构建“基本模型”工件,它将生成“base-model-1.0-SNAPSHOT.jar”,而复制资源步骤将其复制为“base-model.jar”

因此,在hibernate组件的pom中:

            <!-- We want to copy across all our artifacts containing java code
        generated from our scheams. We copy them across and strip the version
        so that our persistence.xml can reference them directly in the tag
        <jar-file>target/dependency/${artifactId}.jar</jar-file> -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.5.1</version>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>process-resources</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                </execution>
            </executions>       
            <configuration>
                <includeArtifactIds>base-model</includeArtifactIds>
                <stripVersion>true</stripVersion>
            </configuration>        
        </plugin>

org.apache.maven.plugins
maven依赖插件
2.5.1
复制依赖项
过程资源
复制依赖项
基本模型
真的
然后我在下一阶段调用hibernate插件“process classes”:


org.codehaus.mojo
hibernate3 maven插件
2.2
生成ddl
进程类
hbm2ddl
hbm2java
注释配置
/src/main/java
<jar-file>target/dependency/base-model.jar</jar-file>
<property name="hibernate.archive.autodetection" value="class, hbm"/>
 <jar-file>file:../target/classes</jar-file>
 <jar-file></jar-file>