hibernate 4.3.x - 加载所有带注释的实体 类
hibernate 4.3.x - load all entity annotated classes
在我工作的一个项目中,我不使用 Spring,我只使用 Hibernate。我不想为实体 mappings/descriptions/etc 使用 hbm.xml 文件。我只想使用注释。
我如何告诉 Hibernate 从某些包中加载所有 Entity/Table
注释的 类?
我在网上搜索过,但没有找到。此外,我没有找到有关最新 Hibernate 版本的信息(大部分已过时 articles/posts/etc)。
编辑 1:
http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/#mapping
休眠文档页面是这样说的:
Object/relational mappings can be defined in three approaches:
1) using Java 5 annotations (via the Java Persistence 2 annotations)
2) using JPA 2 XML deployment descriptors (described in chapter XXX)
3) using the Hibernate legacy XML files approach known as hbm.xml
就是这样,我只想将 1) 与
SessionFactory/Session 休眠 API。
编辑 2:
尽管我的问题被标记为重复,但事实并非如此,因为我不想使用 JPA(和隐含的描述符),而只是使用上面列出的方法 1)。
好的,这在 Hibernate 4 中是不可能的。3.x而且似乎永远不可能。
另请参阅此 question/answer(尽管此 post 很旧,但非常有效):
Add Annotated Class in Hibernate by adding all classes in some package. JAVA
1) 在我对此做了一些研究之后,似乎常见的误解是 Configuration.addPackage
允许我们从给定的包中加载所有实体 类。这不是真的。我通过查看 hibernate 源代码很难找到它,然后我才发现上面的 SO question/answer 证实了这一点。事实上,我不太确定 addPackage
的作用,但它对我的情况似乎不是很有用。
2) 似乎我们可以做的一件事是为我们自己的每个注释实体 类 调用 Configuration.addAnnotatedClass
,例如通过在编译时对 类 进行硬编码。或者...或者通过使用 Reflections or Guava 我们可以在运行时动态地从给定的包中找到所有(即我们自己的)实体 类,循环遍历它们,并且仍然调用 Configuration.addAnnotatedClass
。 Reflections 的唯一问题是它有很多自己的依赖项。因此,如果我们决定使用 Reflections,我们必须为这个简单的事情(多么痛苦)添加 9 个新的 JAR。使用 Guava 会更容易一些,我们只需调用
ClassPath.from
(
Thread.currentThread().getContextClassLoader()
).
getTopLevelClasses(pckg)
.
如果有人有更好的方法,欢迎提供。
我会接受最佳答案,不一定是我的答案。
在我工作的一个项目中,我不使用 Spring,我只使用 Hibernate。我不想为实体 mappings/descriptions/etc 使用 hbm.xml 文件。我只想使用注释。
我如何告诉 Hibernate 从某些包中加载所有 Entity/Table
注释的 类?
我在网上搜索过,但没有找到。此外,我没有找到有关最新 Hibernate 版本的信息(大部分已过时 articles/posts/etc)。
编辑 1:
http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/#mapping
休眠文档页面是这样说的:
Object/relational mappings can be defined in three approaches:
1) using Java 5 annotations (via the Java Persistence 2 annotations)
2) using JPA 2 XML deployment descriptors (described in chapter XXX)
3) using the Hibernate legacy XML files approach known as hbm.xml
就是这样,我只想将 1) 与 SessionFactory/Session 休眠 API。
编辑 2:
尽管我的问题被标记为重复,但事实并非如此,因为我不想使用 JPA(和隐含的描述符),而只是使用上面列出的方法 1)。
好的,这在 Hibernate 4 中是不可能的。3.x而且似乎永远不可能。
另请参阅此 question/answer(尽管此 post 很旧,但非常有效):
Add Annotated Class in Hibernate by adding all classes in some package. JAVA
1) 在我对此做了一些研究之后,似乎常见的误解是 Configuration.addPackage
允许我们从给定的包中加载所有实体 类。这不是真的。我通过查看 hibernate 源代码很难找到它,然后我才发现上面的 SO question/answer 证实了这一点。事实上,我不太确定 addPackage
的作用,但它对我的情况似乎不是很有用。
2) 似乎我们可以做的一件事是为我们自己的每个注释实体 类 调用 Configuration.addAnnotatedClass
,例如通过在编译时对 类 进行硬编码。或者...或者通过使用 Reflections or Guava 我们可以在运行时动态地从给定的包中找到所有(即我们自己的)实体 类,循环遍历它们,并且仍然调用 Configuration.addAnnotatedClass
。 Reflections 的唯一问题是它有很多自己的依赖项。因此,如果我们决定使用 Reflections,我们必须为这个简单的事情(多么痛苦)添加 9 个新的 JAR。使用 Guava 会更容易一些,我们只需调用
ClassPath.from
(
Thread.currentThread().getContextClassLoader()
).
getTopLevelClasses(pckg)
.
如果有人有更好的方法,欢迎提供。
我会接受最佳答案,不一定是我的答案。