有没有办法在 persistence.xml 之外定义 jpa 实体类(即在单独的文件中)?
能够不将 persistence.xml 作为外部文件也足够了。
提前致谢,
史蒂文
编辑:
抱歉我没说清楚。这是在 Java SE 环境中。
另外,我不想在我的 persistence.xml 文件中列出 some.class.AClass 。
这是因为我想动态创建此类列表并引用包含此列表的文件。
编辑2:
设法通过在打包之前的构建时编写 persistence.xml 文件来解决此问题。如果有人感兴趣,我使用 scannotations 来发现所有用 @Entity 注释的类,并将它们写入 target/classes/META-INF 中的 persistence.xml 文件(使用 maven)。
在 Java SE 环境中,可移植应用程序must明确地列出类persistence.xml
。来自 JPA 1.0 规范:
6.2.1.6 映射文件、jar 文件、类、排除未列出的类
以下课程必须是
隐式或显式表示为
托管持久性类是
包含在持久性单元中:
实体类;可嵌入类;
映射的超类。
托管持久性类的集合
由持久性单元管理
是通过使用一个或多个来定义的
下列的:
- 一个或多个对象/关系映射 XML 文件
- 将搜索类的一个或多个 jar 文件
- 明确的类列表
- 根中包含的带注释的托管持久性类
持久化单元(除非
exclude-unlisted-classes
元素是
指定的)
(...)
命名的托管持久性列表
也可以指定类
JAR 文件的或补充
和映射文件。任意映射
在这些上找到的元数据注释
类将被处理,或者它们
将使用映射进行映射
注释默认。类元素
用于列出托管持久性
班级。所有命名的托管列表
必须指定持久化类
在 Java SE 环境中以确保
可移植性。便携式Java SE
应用程序不应依赖于
此处描述的其他机制
指定托管持久性
持久化单元的类。
持久性提供者可能还需要
实体类的集合和
要管理的类必须是
充分列举了每个persistence.xml
Java SE 中的文件
环境。
根中包含的所有类
持久化单元也会被搜索
用于带注释的托管持久性
类和任何映射元数据
在它们上找到的注释将是
已处理,否则将被映射
使用映射注释默认值。
如果不是故意的
带注释的持久化类
包含在根中
持久化单元包含在
持久化单元exclude-unlisted-classes
元素
应该使用。The
exclude-unlisted-classes
元素是
不适用于 Java SE
环境。
所管理实体的结果集
持久化单元是联合体
这些来源,以及映射
元数据注释(或注释
默认值)对于任何给定的类
被 XML 映射覆盖
信息文件(如果两者都有)
注释以及 XML 映射
对于那堂课。最小便携
覆盖级别是
持久字段或属性。
如果可移植性不是问题,某些提供程序确实支持 Java SE 环境中的实体发现(例如 EclipseLink、休眠 http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html/configuration.html#setup-configuration-packaging).
如果考虑可移植性,使用 Spring 等第三方容器会有所帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)