【发布时间】:2014-06-10 22:06:32
【问题描述】:
我是新手,很迷茫,非常感谢一些帮助。
我有一个 spring 应用程序,它当前设置为使用 JPA - 使用 EntityManager。所以配置文件有类似
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
....
Spring 注入是用来配置的,所以我有一个 DaoImpl.java 文件,它有
@PersistenceContext
protected EntityManager entityManager;
和EntityManager可以直接在这个java文件中使用。
但是,我需要执行一些本机 JDBC 查询 - EntityManager 不起作用。所以我在这里也需要某种注入过程。我的配置文件有
<bean id="dataSource" destroy-method="close"
class="org.apache.commons.dbcp.BasicDataSource" primary="true">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url"
value="jdbc:oracle:thin:@${database.host}:${database.port}:${database.instance}" />
.....
但是我怎样才能使用一些注入过程来进行 jdbc 调用呢?我可以不使用 jdbcTemplate 吗?
我已经尝试从 EntityManager 获取 SQL 连接,但出现错误
Caused by: java.lang.IllegalStateException: Not allowed to create transaction on shared EntityManager - use Spring transactions or EJB CMT instead
我正在尝试执行查询
BEGIN ret := f_test(); END;
非常感谢您的帮助...
【问题讨论】:
-
JdbcTemplate有什么问题,这将参与当前事务,您唯一需要做的就是添加一个JdbcTemplate并完成。或者,如果您不想要您想要的东西,您不能用EntityManager.createNativeQuery(<your-query-here>)> 做什么? -
createNativeQuery 在具有 := 的 PL/SQL 语句上失败。 Hibernate 无法处理 :.好的,会看看JdbcTemplate。非常感谢!我只是想我可以直接使用 JDBC 连接而无需进一步配置
-
使用 JdbcTemplate 更容易恕我直言。 hibernate 中的
:用于命名参数,因此它确实不起作用(您可以尝试转义它们)。 -
好的,我会试试 JDBCTemplate。我试过用 \\ 转义,但没有用。 (我做错什么了吗?)
-
也许您可以将您尝试执行的查询添加到您的帖子中。同时尝试
JdbcTemplate。
标签: spring jdbc entitymanager