我的项目使用Spring,JPA和Hibernate,所以所有EntityManager都是由Spring注入的。
我需要访问持久化类的元数据,例如列长度和可选性。我知道获取此信息的唯一方法是通过Hibernate的Configuration.getClassMapping(String className)。在没有JPA和Spring的纯Hibernate项目中,您可以在创建SessionFactory(即新的Configuration()。configure()。buildSessionFactory())之后保留Configuration,但是由于Spring使用LocalEntityManagerFactoryBean以EntityManagerFactory的形式创建SessionFactory,我不知道在哪里获得配置。
如果无法从Spring检索配置,是否还有其他方法可以访问持久化类的元数据?
感谢。
答案 0 :(得分:3)
事实证明这是不可能的。 Spring使用persistence.xml文件中指定的PersistenceProvider实现以标准方式创建EntityManagerFactory。 HibernatePersistence是Hibernate的PersistenceProvider实现,在使用后不会保留Configuration对象。为了公开配置,你需要自己实现PersistenceProvider,这无论如何都不是什么大问题。
答案 1 :(得分:2)
我没有使用过JPA和spring,但只是直接使用spring进行休眠。 但我猜这个架构很相似。 直接使用hibernate时,使用 LocalSessionFactoryBean 而不是 LocalEntityManagerFactoryBean 。
this thread from the Spring forum中描述了访问hibernate配置的方法。也许你可以调整这种方法来使用LocalEntityManagerFactoryBean。