在我从事的项目中,我不使用 Spring,仅使用 Hibernate。我不想使用 hbm.xml 文件进行实体映射/描述/等。我只想使用注释。
我如何告诉 Hibernate 加载所有内容Entity/Table
来自某些包的带注释的类?
我在网上搜索但没有运气。另外,我没有找到有关最新 Hibernate 版本的信息(主要是过时的文章/帖子/等)。
Edit 1:
http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/#mapping
hibernate 文档页面是这样说的:
对象/关系映射可以通过三种方法定义:
1)使用Java 5注释(通过Java Persistence 2注释)
2)使用JPA 2 XML部署描述符(在第XXX章中描述)
3) 使用 Hibernate 遗留 XML 文件方法(称为 hbm.xml)
就是这样,我只想将 1) 与
SessionFactory/Session Hibernate API。
Edit 2:
尽管我的问题被标记为重复,但事实并非如此,因为我不想使用 JPA(和隐含的描述符),而只想使用上面列出的方法 1)。
好吧,这在 Hibernate 4.3.x 中是不可能的,而且似乎永远不可能。
另请参阅这个问题/答案(尽管这篇文章很旧,但它非常有效):
通过添加某个包中的所有类来在 Hibernate 中添加带注释的类。爪哇
1)在我对此进行了一些研究之后,似乎这是一个常见的误解Configuration.addPackage
允许我们从给定的包中加载所有实体类。这不是真的。我通过查看休眠源代码发现了这一点,然后我才发现上面的问题/答案证实了这一点。事实上我不太确定什么addPackage
确实如此,但它似乎对我的情况不太有用。
2)似乎我们能做的一件事就是打电话Configuration.addAnnotatedClass
对于我们自己的每个带注释的实体类,例如通过在编译时对这些类进行硬编码。或者...或者使用反思 or Guava我们可以在运行时动态地从给定包中找到所有(即我们自己的)实体类,循环遍历它们,并且仍然调用Configuration.addAnnotatedClass
。 Reflections 的唯一问题是它有很多自己的依赖项。因此,如果我们决定使用 Reflections,我们必须为这个简单的事情添加 9 个新的 JAR(多么痛苦)。使用 Guava 会更容易一些,我们只需调用
ClassPath.from
(
Thread.currentThread().getContextClassLoader()
).
getTopLevelClasses(pckg)
.
如果有人有更好的方法 - 请随时提供。
我会接受最佳答案,不一定是我的答案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)