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

如何以编程方式检索持久性单元使用的数据源

尉迟禄
2023-03-14
问题内容

…实际上没有阅读和解析 persistence.xml

我可以EntityManager使用工厂的属性来检索其持久性单元的名称。我可以使用jboss-
as-controller-client
检索可用的数据源。但我发现没有API可以提供特定的数据源EntityManager

String带有名称的A 就足够了。

谢谢

我正在JBoss 7.1.1.Final上通过JPA 2使用Hibernate 4.0.1.Final。

编辑:并且我想尽可能避免从JPA迁移到Hibernate API。

编辑:Augusto的解决方案有效,我在细节上有一些注释:由于ClassCastException:(
org.jboss.as.jpa.container.TransactionScopedEntityManager cannot be cast to org.hibernate.ejb.EntityManagerImpl),EM的转换不起作用,但它对检索到的工厂有效。所以我省略了步骤1。

我也找不到从实例检索数据源名称的方法。因此,我必须对目录名称感到满意:connectionProvider.getConnection().getCatalog();


问题答案:

你需要:

  1. 投射EntityManagerEntityManagerImpl(Hibernate实现)
  2. 呼叫 getFactory()
  3. 投放EntityManagerFactoryHibernateEntityManagerFactory
  4. 调用getSessionFactory()并将其投射到SessionFactoryImpl
  5. 调用getConnectionProvider()并将其强制转换为正确的实现。您可以在此处查看实现。我认为这是一个DatasourceConnectionProvider
  6. 打电话getDataSource(),您就完成了。

不幸的是,您必须使用Hibernate API,因为无法使用JPA API检索数据源。



 类似资料:
  • 问题内容: 好的,伙计们,所以我最近正在开发一款将用户ID和PASSWORD保存到SharedPreferences的android应用。现在,当用户第二次启动应用程序时,将使用listView中的一些选项将他直接重定向到MainActivity。现在,我头疼极了,这让我真正的疯狂。我无法登录网站并将数据提取到手机中。我已经尝试使用Http(s)UrlConnection,HttpClient,但

  • 问题内容: 在IE中,我只能从JavaScript调用element.click()-如何在Firefox中完成相同的任务?理想情况下,我希望有一些跨浏览器同样可以正常工作的JavaScript,但是如果需要,我将为此使用不同的逐浏览器JavaScript。 问题答案: 该文件说:“ 该 _createEvent_方法已被弃用。使用事件构造来代替。 ” 因此,您应该改用以下方法: 并在这样的元素上

  • 我使用StreamRefs在集群中的参与者之间建立流式连接。目前,在writing节点中,我手动将传入消息保存到日志文件中,但我想知道是否可以将其替换为persistent,用于写入,以及persistent,用于从Akka Persistence journal启动actor时读取。我一直在考虑用Persistent actor的

  • 我有一个使用主干的rails应用程序。在控制台中,我可以创建一个集合,从服务器(3)获取文档,并通过检查长度进行确认 单据=新单据() 文档。fetch() 文档。长度 3 去拿一份那些文件 d1=文件。在(0)对象{cid=“c3”,已更改={…},属性={…},更多…} 销毁文件 d1。破坏();删除http:localhost:3000/docs/1 204无内容23ms jquery。js

  • 有什么方法可以获得手机当前运行的API版本吗?

  • 问题内容: 我正在为android应用程序开发自动化测试(使用Robotium)。为了确保测试的一致性和可靠性,我想以干净状态(正在测试的应用程序)开始每个测试。为此,我需要清除应用数据。可以在“设置/应用程序/管理应用程序/ [我的应用程序] /清除数据”中手动完成此操作 以编程方式完成此操作的推荐方法是什么? 问题答案: 您可以使用包管理器工具清除已安装应用的数据(类似于按设备上应用设置中的“