我正在开发一个应用程序(使用JPA / Hibernate,Servlet,JSP,没有框架的Java EE),我发现在特定模块中,更容易实现本机SQL(而不是使用ORM直接解决方案)。完全没问题,但我想让它动态制作,即:我希望我的代码能够防止我更改持久性提供程序。
我想做类似的事情:
MySpecificQueryMakerInterface myQueryMaker = new MySpecificQueryMakerFactory(EntityManager.getPersistenceUnit().getProvider());
在MySpecificQueryMakerFactory,
中创建适当的类,它将为我正在使用的当前数据库执行本机SQL。这样做,我将能够创建将MySpecificQueryMakerInterface
扩展MyPostgresQueryMaker
或MyOracleQueryMaker
的类,并且只有在添加新的特定数据库时才会更改工厂。
有没有办法使用JPA / Hibernate获取持久性单元/数据源的信息?
答案 0 :(得分:0)
我认为最好的方法是在持久性单元中指定一个自定义属性(例如类名),您可以通过EntityManagerFactory#getProperties()访问该属性。您可以通过EntityManager#getEntityManagerFactory()来获取工厂。