编程语言
首页 > 编程语言> > Java-Hibernate 4.3.x-加载所有带有实体注释的类

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

作者:互联网

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

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

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

编辑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 /会话Hibernate API.

编辑2:

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

解决方法:

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

另请参阅以下问题/答案(即使这篇文章很旧,也很有效):
Add Annotated Class in Hibernate by adding all classes in some package. JAVA

1)在对此进行了一些研究之后,似乎很普遍的误解是Configuration.addPackage允许我们从给定的包中加载所有实体类.这不是真的.我通过查看休眠源找到了困难的方法,然后才发现上面的SO问题/答案对此进行了确认.实际上,我不太确定addPackage是做什么的,但是对于我的情况来说,它似乎不太有用.

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

如果有人有更好的方法,请随时提供.
我会接受最佳答案,不一定是我的答案.

标签:java,jpa,hibernate,hibernate-4-x
来源: https://codeday.me/bug/20191010/1888317.html