当前位置: 首页 > 知识库问答 >
问题:

Hibernate 4与JPA的集成

曾嘉福
2023-03-14

环境:Spring 4,Hibernate 4,JPA

如果调用builderdao.delete(实体),我们会在线程“main”org.springframework.dao.invaliddataaccessapiusageException中得到异常:只读模式(flushmode.manual)中不允许写操作:将会话转换为flushmode.commit/auto或从事务定义中删除“read only”标记。配置设置如下所示

我想用JPA,怎么解决?

<bean id="builder" class="org.springframework.aop.framework.ProxyFactoryBean"> 
    <property name="interceptorNames"> 
        <value>transactionInterceptor,builderAOP</value> 
    </property> 
</bean> 
<bean id="builderAOP" class="my.aop.BuilderImp">
    <property name="corporateDao" ref="corporateEventDao"/>
</bean>
<bean id="corporateEventDao" class="my.jdbc.JdbcDaoImpl">
    <property name="dataSource" ref="dataSource"/>
    <property name="hibernateTemplate"><ref bean="hibernateTemplate"/></property>
</bean>

<bean id="hibernateTemplate" class="org.springframework.orm.hibernate4.HibernateTemplate">
    <property name="sessionFactory">
        <ref bean="sessionFactory" />
    </property>
</bean> 

事务拦截器

<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> 
<property name="transactionManager"> 
    <ref bean="transactionManager"/> 
</property> 
<property name="transactionAttributes">
    <props>
        <prop key="save*">PROPAGATION_REQUIRED</prop>
        <prop key="update*">PROPAGATION_REQUIRED</prop>
        <prop key="delete*">PROPAGATION_REQUIRED</prop>
    </props>    
</property></bean>

TransactionManager

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

包装sessionFactory

<bean id="sessionFactory" factory-bean="entityManagerFactory" factory-method="getSessionFactory" />

EntityManagerFactory

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mappingResources">
<list>
   <value>xxxx.hbm.xml</value>
</list>
</property>
<property name="jpaVendorAdapter">
   <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>
<property name="jpaProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <prop key="hibernate.show_sql">false</prop>
            <prop key="hibernate.format_sql">false</prop>
            <prop key="hibernate.connection.useUnicode">true</prop>
            <prop key="hibernate.connection.characterEncoding">UTF-8</prop>
            <prop key="hibernate.jdbc.batch_size">1000</prop>          
            <prop key="hibernate.jdbc.fetch_size">100</prop>  
            <prop key="use_streams_for_binary">true</prop>     
            <prop key="hibernate.connection.autoReconnect">true</prop>
        </props>
    </property>
</bean>

共有1个答案

穆睿才
2023-03-14

这能帮到你吗?补充文件

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="save*" propagation="REQUIRED"/>
        <tx:method name="update*" propagation="REQUIRED"/>
        <tx:method name="delete*" propagation="REQUIRED"/>
        <tx:method name="batchSave*" propagation="REQUIRED"/>
        <tx:method name="batchDelete*" propagation="REQUIRED"/>
        <tx:method name="get*" propagation="REQUIRED" read-only="true"/>
        <tx:method name="find*" propagation="REQUIRED" read-only="true"/>
        <tx:method name="list*" propagation="REQUIRED" read-only="true"/>
        <tx:method name="query*" propagation="REQUIRED" read-only="true"/>
        <tx:method name="page*" propagation="REQUIRED" read-only="true"/>
        <tx:method name="*" propagation="REQUIRED"/>
    </tx:attributes>
</tx:advice>
 类似资料:
  • 我的样本代码在这里 尝试运行junit测试时,收到以下错误消息。 JAVAlang.IllegalStateException:未能加载ApplicationContext 原因:org。springframework。豆。工厂BeanCreationException:创建名为“nameDao”的bean时出错:调用init方法失败;嵌套的异常是java。lang.IllegalArgument

  • 我还没有找到在QueryDSL中声明这种SQL的任何方法。我能够编写两个select语句,但是我仍然无法将它们与结合起来。 最后,我想检索一个与给定查询匹配的ID列表。通常,相交的数量可以是20或30左右,这取决于我要搜索的键/值对的数量。 有没有人知道如何使用QueryDSL执行类似的操作?

  • 我正在将Spring Boot项目与Spring批处理和数据jpa项目集成。所有与作业和数据配置相关的东西都是正确的,除了将我的作业编写器结果保存在数据库中。在我读取文件并对其进行处理后,我无法将其写入mysql数据库。没有错误,但也没有插入。有趣的是我的数据源已配置。因为在插入之前,我可以从数据库中获取示例记录。请协助我解决这个问题。 我的申请。属性: 批次配置: 道类: 作家类: temPer

  • 我的项目是在Windows-SpringIDE-TomcatV8上进行的。0用于windows,MySql5。该项目还涉及java7、Tomcat7。我所有的课都是自动注释的。问题是,当我在Centos上部署project时,我有java8、Tomcat8和一个异常。请提出一些解决问题的建议。 以下是linux上的例外情况: 组织。springframework。豆。工厂BeanCreationE

  • 描述: 建立一个基于SpringMVC的JavaEE项目 运行该项目,效果良好。 添加Hibernate4框架库支持 问题,异常 1)在我将“data source”bean添加到SpringMVC配置文件后,它总是在启动时抛出。 ServletContext资源[/WEB-INF/dispatcher servlet.XML]的XML文档中的第45行无效;嵌套的异常是org.xml.sax。SA

  • 我在Hibernate4中使用JTA事务管理器。有人知道这个问题吗?在执行刷新时,我面临错误。 下面是我面临上述问题的一段代码。 XML: