【问题标题】:hibernate 4.3.x - load all entity annotated classeshibernate 4.3.x - 加载所有实体注释类
【发布时间】:2015-01-22 20:13:40
【问题描述】:

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

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

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

编辑 1:

http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/#mapping

休眠文档页面是这样说的:

对象/关系映射可以用三种方法定义:
1) 使用 Java 5 注释(通过 Java Persistence 2 注释)
2) 使用 JPA 2 XML 部署描述符(在第 XXX 章中描述)
3) 使用称为 hbm.xml 的 Hibernate 遗留 XML 文件方法

就是这样,我只想将 1) 与 会话工厂/会话休眠 API。

编辑 2:

即使我的问题被标记为重复,但事实并非如此,因为我不想使用 JPA(和隐含的描述符),而只是从上面列出的那些方法中使用 1)。

【问题讨论】:

  • @hwellmann 如果我不想拥有 persistence.xml 而只有 hibernate.cfg.xml 怎么办?我需要两者兼得吗?我只想要具有 Hibernate 扫描带注释的实体类的行为的 hibernate.cfg.xml。这不可能吗?!
  • @VladMihalcea 如果我不想拥有 persistence.xml 而只有 hibernate.cfg.xml 怎么办?我需要两者兼得吗?我只想要具有 Hibernate 扫描带注释的实体类的行为的 hibernate.cfg.xml。这不可能吗?!
  • 换句话说,我认为通过实体类中的这些注释,我可以避免使用 .hbm.xml 映射文件,仍然使用 Hibernate 提供的 SessionFactory 和 Session API,并让这些 API 知道我的实体类。任何想法如何最容易地实现这一目标?
  • 无论如何,我的问题与上面指出的问题绝不重复。

标签: java hibernate jpa hibernate-4.x


【解决方案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 的唯一问题是它自身有很多依赖项。所以如果我们决定使用反射,我们必须为这个简单的事情添加 9 个新的 JAR(多么痛苦)。使用 Guava 会更容易一些,我们可以拨打
ClassPath.from ( Thread.currentThread().getContextClassLoader() ). getTopLevelClasses(pckg)

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

【讨论】:

  • 我自己刚刚经历了这个头痛。从看起来很明显的“addPackage”开始。但是,在使用上面的代码添加所有类之后,我最终仍然使用 addPackage。它读取包级元数据(pacakge-info.java),我在其中为自定义类型添加了一些注释。
猜你喜欢
  • 2017-01-19
  • 1970-01-01
  • 2010-09-21
  • 2014-03-12
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 2013-03-08
  • 1970-01-01
相关资源
最近更新 更多