5

我在一个使用 JPA 的 EclipseLink 实现与 PostgreSQL 数据库对话的项目中。我有一个任务,PostgreSQL NOTIFY/LISTEN 似乎非常适合。不幸的是,我是一个 JPA 新手,并且正在努力弄清楚如何使它工作。所以我想我真的有两个问题;回答任何一个都会让我开心。

1) 对我来说,获得与数据库的直接 JDBC 连接的最佳方式是什么?(我真诚地希望证明是类型org.postgresql.PGConnection。)

或者

2) 我org.postgresql.PGConnection.getNotifications()通过 EclipseLink JPA 模拟/访问的最佳方式是什么?

非常感谢您的帮助。


编辑: 两个可行的解决方案!我喜欢这个网站。如果有人在我分发复选标记之前对隐藏的陷阱/好处有什么要说的,这将使 Pascal 或 Balus 的解决方案比另一个更好,我想听听。

4

2 回答 2

8

EntityManagerEclipseLink wiki中回答了从 EclipseLink 中获取 JDBC 连接。

方式因 JPA API 版本而异。这是维基的摘录:

JPA 2.0

entityManager.getTransaction().begin();
java.sql.Connection connection = entityManager.unwrap(java.sql.Connection.class);
...
entityManager.getTransaction().commit();

JPA 1.0

entityManager.getTransaction().begin();
UnitOfWorkImpl unitOfWork = (UnitOfWorkImpl)((JpaEntityManager)entityManager.getDelegate()).getActiveSession();
unitOfWork.beginEarlyTransaction();
java.sql.Connection connection = unitOfWork.getAccessor().getConnection();
...
entityManager.getTransaction().commit();
于 2010-01-14T22:01:04.177 回答
2

你应该能够从中得到它org.eclipse.persistence.internal.jpa.EntityManagerImpl返回的EntityManager.getDelegate()

java.sql.Connection conn = ((EntityManagerImpl)(em.getDelegate())).getServerSession().getAccessor().getConnection();
于 2010-01-14T22:09:29.713 回答