hibernate 4.3.x – 加载所有实体注释类
在我工作的项目中,我不使用Spring,我只使用Hibernate。 我不想将hbm.xml文件用于实体映射/描述/等。 我只想使用注释。
如何告诉Hibernate从某些软件包加载所有Entity/Table
注释类?
我在网上搜索但我没有运气。 另外,我找不到有关最新Hibernate版本的信息(主要是过时的文章/post等)。
编辑1:
http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/#mapping
hibernate doc页面说明了这一点:
对象/关系映射可以用三种方法定义:
1)使用Java 5注释(通过Java Persistence 2注释)
2)使用JPA 2 XML部署描述符(在第XXX章中描述)
3)使用称为hbm.xml的Hibernate遗留XML文件方法
就这样,我只想使用1)与SessionFactory / Session Hibernate API。
编辑2:
即使我的问题被标记为重复,但事实并非如此,因为我不想使用JPA(以及隐含的描述符),而只是使用上面列出的那些方法来处理1)。
好吧,这在Hibernate 4.3.x中是不可能的,似乎永远不可能。
另见这个问题/答案(尽管这篇文章很老,但它非常有效):
通过在某个包中添加所有类,在Hibernate中添加带注释的类。 JAVA
1)在我对此进行了一些研究后,似乎是一种常见的误解,即Configuration.addPackage
允许我们从给定的包中加载所有实体类。 这不是真的。 通过查看hibernate源代码我发现它很难,然后才发现上面的SO问题/答案证实了这一点。 事实上,我不太确定addPackage
是做什么的,但对我的情况来说它似乎没什么用。
2)似乎我们可以做的一件事是为我们自己的每个注释实体类调用Configuration.addAnnotatedClass
,例如通过在编译时对这些类进行硬编码。 或者……或者通过使用Reflections或Guava,我们可以在运行时动态地从给定包中找到所有(即我们自己的)实体类,循环遍历它们,并仍然调用Configuration.addAnnotatedClass
。 Reflection的唯一问题是它带有很多自己的依赖。 因此,如果我们决定使用Reflections,我们必须为这个简单的事情添加9个新的JAR(多么痛苦)。 使用番石榴它更容易,我们可以打电话
ClassPath.from ( Thread.currentThread().getContextClassLoader() ). getTopLevelClasses(pckg)
ClassPath.from ( Thread.currentThread().getContextClassLoader() ). getTopLevelClasses(pckg)
。
如果有人有更好的方法 – 随时提供它。
我会接受最好的答案,不一定是我的答案。
- Spring和hibernate.cfg.xml
- java.lang.NoClassDefFoundError:设置了org / hibernate / Session hibernate jars
- 在数据库中使用Java 8 LocalDate和LocalDateTime进行Hibernate
- 每个实体hibernate两个表
- Hibernate 4.1.9(最新的最终版本)报告`不支持嵌套事务`
- 如何将Hibernate类映射转换为Spring应用程序上下文?
- 在独立应用程序中的hibernate中配置sessionFactory
- Hibernate:实体上的多个filter
- Postgresql日期类型和java SimpleDateFormat