相关疑难解决方法(0)

UserTransaction和EntityManager如何交互?

这是一个学术问题; 我没有破坏与此相关的代码.我只是想扩大我对引擎盖下发生的事情的理解.

我在我的JPA DAO中使用的代码模式(从书籍和教程中复制)用于我的典型JSF Web应用程序基本上是这样的:

public class someDAO {

    @PersistenceContext protected EntityManager   em;
    @Resource           private   UserTransaction utx;    

    public void persist(Entity entity) {
        try {
            utx.begin();
            em.persist(entity);
            utx.commit();
        } catch ( // gawd awful long list of possible exceptions ) 

        // etc
Run Code Online (Sandbox Code Playgroud)

所以我的问题如下:

  1. 为什么EntityManager实例和UserTransaction实例注入了来自两个看似无关的包的注释?

  2. 为什么注释@Resource和@PersistenceContext而不是@ManagedProperty或@Inject使用?

  3. persist()方法如何访问utx对象并与之交互?如果我忘记了utx.begin()调用,实体管理器就会知道它并抛出异常.它必须以某种神奇的方式找到UserTransaction对象.是不是更好的架构来定义接口,如: em.persist(utx,entity)

  4. 如果utx是某种单例 - 是否可以一次打开多个UserTransaction?

非常感谢任何讨论.

jpa jsf-2 jpa-2.0

16
推荐指数
1
解决办法
2万
查看次数

升级Spring依赖项后获取错误A JTA EntityManager无法使用getTransaction()

我正在使用我的项目<version.org.aspecj>1.7.4</version.org.aspecj><vesrion.org.springframework>4.0.1.RELEASE</vesrion.org.springframework>版本.最近我将这两个版本升级到 <version.org.aspectj>1.8.9</version.org.aspectj><version.org.springframework>4.3.11.RELEASE</version.org.springframework>.

我在我的项目中使用JPA存储库,当我尝试保存任何对象时,我收到的错误如"JTA EntityManager无法使用getTransaction()".

下面是我的persistence.xml和其他配置.请求您查看这些配置并分享您的输入.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
             version="2.0">
    <persistence-unit name="appPersistenceUnit"
                      transaction-type="JTA">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>java:jboss/datasources/appDS</jta-data-source>
        <!-- entities -->
        <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
        <properties>
            <property name="jboss.entity.manager.factory.jndi.name"
                      value="persistence-units/fusePersistenceUnit"/>
            <property name="hibernate.transaction.jta.platform"
                      value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform"/>
            <property name="hibernate.connection.autocommit" value="false"/>
            <property name="hibernate.connection.charSet" value="UTF-8"/>
            <property name="hibernate.current_session_context_class"
                      value="jta"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
            <property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy"/>
            <property name="hibernate.format_sql" value="false"/>
            <property name="hibernate.generate_statistics" value="false"/>
            <property name="hibernate.hbm2ddl.auto" value="validate"/>
            <property name="hibernate.jdbc.batch_size" value="40"/>
            <property name="hibernate.show_sql" value="false"/>
            <property name="hibernate.cache.use_query_cache" value="true"/>
            <property name="hibernate.cache.use_second_level_cache" value="true"/>
                        <property name="hibernate.search.default.directory_provider" value="filesystem" />

            <property name="hibernate.connection.url" …
Run Code Online (Sandbox Code Playgroud)

java hibernate jta spring-transactions spring-data

12
推荐指数
1
解决办法
376
查看次数

标签 统计

hibernate ×1

java ×1

jpa ×1

jpa-2.0 ×1

jsf-2 ×1

jta ×1

spring-data ×1

spring-transactions ×1