一尘不染

Hibernate 4.3.x-加载所有带有实体注释的类

hibernate

在我从事的项目中,我不使用Spring,而仅使用Hibernate。我不想将hbm.xml文件用于实体映射/描述/等。我只想使用注释。

如何告诉Hibernate Entity/Table从某些包中加载所有带注释的类?

我在网上搜索,但没有运气。我也找不到有关最新的Hibernate版本的信息(大多是过时的文章/帖子/等)。

编辑1:

http://docs.jboss.org/hibernate/orm/4.3/manual/zh-
CN/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一起使用。

编辑2:

即使我的问题被标记为重复,也不是,因为我不想使用JPA(和隐含的描述符),而只使用上面列出的方法1)。


阅读 206

收藏
2020-06-20

共1个答案

一尘不染

好的,这在Hibernate 4.3.x中是不可能的,而且似乎永远不可能。

1)我对此进行了一些研究之后,似乎是一个常见的误解,Configuration.addPackage使我们可以从给定的程序包中加载所有实体类。这不是真的。我通过查看hibernate源找到了困难的方法,然后才发现上面的SO问题/答案对此进行了确认。实际上,我不太确定该怎么addPackage做,但是对于我的情况来说,它似乎不太有用。

2)似乎我们可以做的一件事是调用Configuration.addAnnotatedClass我们自己的每个带注释的实体类,例如在编译时对这些类进行硬编码。或者…或者,通过使用ReflectionsGuava,我们可以在运行时动态地从给定包中找到所有(即我们自己的)实体类,循环遍历它们,然后仍然调用Configuration.addAnnotatedClass。Reflections的唯一问题是它具有很多依赖关系。因此,如果我们决定使用Reflections,就必须为这个简单的事情添加9个新的JAR(这很痛苦)。使用番石榴会更容易一些,我们可以致电
ClassPath.from ( Thread.currentThread().getContextClassLoader()).getTopLevelClasses(pckg)

2020-06-20