当前位置: 首页 > 面试题库 >

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

陶富
2023-03-14
问题内容

在我从事的项目中,我不使用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)。


问题答案:

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

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

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



 类似资料:
  • 问题内容: 在我从事的项目中,我不使用Spring,而仅使用Hibernate。我不想将hbm.xml文件用于实体映射/描述/等。我只想使用注释。 如何告诉Hibernate 从某些包中加载所有带注释的类? 我在网上搜索,但没有运气。我也找不到有关最新的Hibernate版本的信息(大多是过时的文章/帖子/等)。 编辑1: http://docs.jboss.org/hibernate/orm/4

  • 问题内容: 是否可以在运行时创建hibernate的Entity类(带有注释)?它应与也在运行时中添加的表相关。重要的是,该实体应该对Hibernate可见。一般情况下是否可能,请您给我有关该问题的任何建议吗?我了解,反射是关键字,但需要更多的单词。问候。 问题答案: 在这种情况下,您可能希望在运行时以编程方式创建Hibernate Session Factory,并传入创建的新映射,请访问htt

  • 我的测试框架使用selenium的PageFactory和Lambok。我想编写一个方面来捕获测试流在运行时遇到的所有web元素。 一个典型的页面看起来像: @FindBy确定测试所处理的webelement。这样的页面有50页。 当使用PageFactory实例化页面时,将实例化webElement字段(使用与@FindBy中的值对应的webElement实例进行分配)。 我希望在实例化这些we

  • 问题内容: 我正在从DropWizard 0.7.1迁移到0.8.1的过程中。这包括从Jersey 1.x迁移到2.x。在使用Jersey 1.18.1的实现中,我实现了(为简单起见,更改了所有类名)。此类将创建包含自定义注入批注的对象。包含传递并由读取的各种属性。最后,在该类中,我注册的新实例,如下所示。 我已经进行了一些研究,似乎无法完全围绕如何在Jersey 2.x中创建(或替换)这样的se

  • 问题内容: 是否可以在运行时创建休眠的Entity类(带有注释)?它应该与也在运行时添加的表相关。重要的是,该实体应该对Hibernate可见。一般情况下是否可能,请您给我有关该问题的任何建议吗?我了解,反射是关键字,但需要更多的单词。问候。 问题答案: 在这种情况下,您可能希望在运行时以编程方式创建Hibernate Session Factory,传入您创建的新映射,并查看http://doc

  • 我想在加载ApplicationContext后将@Component类添加到spring容器中。但我不能使用BeanFactory。因为我使用的是BeanFactory,所以我必须为这些类定义bean。但是我不能定义它(如果我不使用反射)。因为这些类将在运行时由类加载器加载。 例如 在本例中,Spring在应用程序调用时为此类创建bean。没有必要用@Bean来定义bean。但是我想要的是编译S