用JPA编写API

时间:2013-09-10 14:07:41

标签: spring api java-ee jpa jdbc

在一家大公司,我们的团队提供API来访问oracle DB上的数据。到目前为止,我们使用普通的SQL(JDBC)来获取/写入数据库上的数据。 所以大多数现有的API都是这样的(好吧,并不总是那么愚蠢: - )

public class DummyApi {

    private final DataSource datasource;

    public DummyApi(javax.sql.DataSource datasource) {
        this.datasource = datasource;

    }

    public void doSomething() throws SQLException {
         Connection connection = datasource.getConnection();
         PreparedStatement statement = connection.prepareStatement("plain sql query");
         statement.execute();
    }
}

使用这样的API很简单,如果您的最终应用程序是纯Java SE,spring或javaEE,则无关紧要。此外,transaction-API适用于此API。我们将它们与Spring TransactionManager(与TransactionAwareDataSourceProxy一起)和CMA-Java EE应用程序中的JTA一起使用。

现在我们评估在新API中使用JPA。我们目前面临的一个重大问题是:我们如何提供一个简单的界面,以便最终应用程序不需要了解JPA?我们如何使用DataSource初始化EntityManager(例如作为构造函数参数提供)?如果在同一事务中存在旧的,简单的JDBC-API和新的JPA-API(在最终应用程序中开始/回滚),我们如何回滚?

感谢您对此事进行一些了解!

1 个答案:

答案 0 :(得分:1)

使用JPA,数据源通常会在persistence.xml中设置。如果需要某种动态数据源,则可以将DataSource作为属性传递给Persistence.createEntityManagerFactory()。

如果要混合使用JDBC,大多数JPA提供程序都提供了获取JDBC连接的方法。通常使用em.unwrap(Connection.class)访问它。您也可以使用JTA或Spring让事务共享相同的连接。