开发者

JPA and PostgreSQL

开发者 https://www.devze.com 2022-12-16 23:04 出处:网络
I\'m on a project that uses the EclipseLink implementation of JPA to talk to a PostgreSQL database.I have a task for which PostgreSQL NOTIFY/LISTEN seems like a perfect fit.Unfortunately, I\'m a JPA n

I'm on a project that uses the EclipseLink implementation of JPA to talk to a PostgreSQL database. I have a task for which PostgreSQL NOTIFY/LISTEN seems like a perfect fit. Unfortunately, I'm a JPA newb, and am struggling to figure out how to make it work. So I guess I really have two questions; answering either one will make me happy.

1) What's the best way for me to get a hold o开发者_如何学Pythonf the direct JDBC connection to the database? (Which I sincerely hope will prove to be of type org.postgresql.PGConnection.)

OR

2) What's the best way for me to emulate/access org.postgresql.PGConnection.getNotifications() via EclipseLink JPA?

Thank you very much for your help.


Edit: Two working solutions! I love this site. If anybody has anything to say about hidden gotchas/benefits that would make either Pascal's or Balus's solution better than the other before I hand out the checkmark, I'd like to hear it.


Getting a JDBC connection from an EntityManager in EclipseLink is answered in the EclipseLink wiki.

The way differs per JPA API version. Here's an extract from the wiki:

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();


You should be able to get it from org.eclipse.persistence.internal.jpa.EntityManagerImpl that is returned by EntityManager.getDelegate():

java.sql.Connection conn = ((EntityManagerImpl)(em.getDelegate())).getServerSession().getAccessor().getConnection();
0

精彩评论

暂无评论...
验证码 换一张
取 消