无法在DAOImplementation类中使用HibernateTemplate保存方法保存学生模型对象 [英] Unable to save Student model object using HibernateTemplate save method in DAOImplementation class

查看:209
本文介绍了无法在DAOImplementation类中使用HibernateTemplate保存方法保存学生模型对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


这是执行spring application时遇到的异常。任何人都可以帮助我解决这个问题。




  log4j:WARN无法为记录器找到appender(org.springframework.core.env.StandardEnvironment)。 
log4j:WARN请正确初始化log4j系统。
Hibernate:如果存在drop table postgres.student007 cascade
Hibernate:create table postgres.student007(id int4 not null,address varchar(255),email varchar(255),name varchar(255),primary在线程主要 org.springframework.dao.InvalidDataAccessApiUsageException键(id)例外:写操作是不允许在只读模式(FlushMode.MANUAL):打开你的会话到FlushMode.COMMIT / AUTO或删除了readonly标志交易的定义。在org.springframework.orm.hibernate4.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1135)

。在org.springframework.orm.hibernate4.HibernateTemplate $ 12.doInHibernate(HibernateTemplate.java:620)
at org.springframework.orm.hibernate4.HibernateTemplate $ 12.doInHibernate(HibernateTemplate.java:617)
at org.springframework.orm.hibernate4.HibernateTemplate.doExecute(Hibern ateTemplate.java:340)在org.springframework.orm.hibernate4.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:308

在org.springframework.orm.hibernate4.HibernateTemplate.save(HibernateTemplate.java: (StudentDaoImplHT.java:22)
at test.Client.main(Client.java:21)




下面是我的配置config.xml文件。任何人都可以帮我解决这个问题。


< blockquote>

 < beans> 
< bean id =bdsclass =org.apache.commons.dbcp.BasicDataSource>
< property name =driverClassNamevalue =org.postgresql.Driver/>
< property name =urlvalue =jdbc:postgresql:// localhost:5432 / postgres/>
< property name =usernamevalue =postgres/>
< property name =passwordvalue =postgres/>
< property name =maxActivevalue =15/>
< property name =maxIdlevalue =5/>
< property name =maxWaitvalue =5000/>
< / bean>

<! - < bean id =sessionFactoryclass =org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean>
- >
< bean id =sessionFactoryclass =org.springframework.orm.hibernate4.LocalSessionFactoryBean>
< property name =dataSourceref =bds/>
< property name =hibernateProperties>
<道具>
< prop key =hibernate.dialect> org.hibernate.dialect.PostgreSQLDialect< / prop>
< prop key =hibernate.hbm2ddl.auto>建立< / prop>
< prop key =hibernate.show_sql> true< / prop>
< /道具>
< / property>
< property name =annotatedClasses>
< list>
< value> model.Student< / value>
< / list>
< / property>
< / bean>
< bean id =htclass =org.springframework.orm.hibernate4.HibernateTemplate>
< property name =sessionFactoryref =sessionFactory/>
< / bean>
< bean id =daoclass =dao.StudentDaoImplHT>
< property name =htref =ht/>
< / bean>
< / beans>


解决方案

这是spring事务的问题。您需要配置事务数据控制台=真正的data-console =truedata-lang =jsdata-hide =falsedata- babel =false>

< bean id =txManagerclass = org.springframework.orm.hibernate4.HibernateTransactionManager > < property name =sessionFactoryref =sessionFactory/> < / bean>

然后启用交易



 < tx:annotation-driven />  
$ b

最后,在您的方法中添加事务配置。



  @Transactional(propagation = Propagation.REQUIRED,readOnly = false)  

您的问题在于您没有使用事务,而是将事情写入数据库。这是不允许的,你应该创建一个事务并使readOnly = false。然后你可以创建表。



你可以使用jdbcTemplate.execute(sql)。创建表。


this is exception i am getting while executing spring application.can anyone help me to resolve this problem.

log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment).
                    log4j:WARN Please initialize the log4j system properly.
                    Hibernate: drop table if exists postgres.student007 cascade
                    Hibernate: create table postgres.student007 (id int4 not null,address varchar(255), email varchar(255), name varchar(255), primary key (id) Exception in thread "main" org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.
                    at org.springframework.orm.hibernate4.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1135)
                    at org.springframework.orm.hibernate4.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:620)
                    at org.springframework.orm.hibernate4.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:617)
                    at org.springframework.orm.hibernate4.HibernateTemplate.doExecute(HibernateTemplate.java:340)
                    at org.springframework.orm.hibernate4.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:308)
                    at org.springframework.orm.hibernate4.HibernateTemplate.save(HibernateTemplate.java:617)
                    at dao.StudentDaoImplHT.save(StudentDaoImplHT.java:22)
                    at test.Client.main(Client.java:21)

below is my configuration config.xml file.can anyone help me to resolve this problem.

      <beans>
        <bean id="bds" class="org.apache.commons.dbcp.BasicDataSource">
           <property name="driverClassName" value="org.postgresql.Driver"/>
           <property name="url" value="jdbc:postgresql://localhost:5432/postgres"/>
           <property name="username" value="postgres"/>
           <property name="password" value="postgres"/>
           <property name="maxActive" value="15"/>
           <property name="maxIdle" value="5"/>
           <property name="maxWait" value="5000"/>
        </bean>

        <!--  <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
         -->
           <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
           <property name="dataSource" ref="bds"/>
           <property name="hibernateProperties">
             <props>
               <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
               <prop key="hibernate.hbm2ddl.auto">create</prop>
               <prop key="hibernate.show_sql">true</prop>    
             </props>
           </property>
           <property name="annotatedClasses">
             <list>
               <value>model.Student</value>
             </list>
           </property>
         </bean>
         <bean id="ht" class="org.springframework.orm.hibernate4.HibernateTemplate">
         <property name="sessionFactory" ref="sessionFactory"/> 
         </bean>
        <bean id="dao" class="dao.StudentDaoImplHT">
        <property name="ht" ref="ht"/>
        </bean>
        </beans>

解决方案

It's the problem of spring transaction. You need to config transaction

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

Then enable the annotation configure for transaction

<tx:annotation-driven />

At last, add the transaction configure in your method.

@Transactional(propagation = Propagation.REQUIRED, readOnly = false)

You problem is that you didn't use the transaction but do writing things into database. It's not allowed, you should create a transaction and make the readOnly = false. Then you can create table.

You can use jdbcTemplate.execute(sql). to create table.

这篇关于无法在DAOImplementation类中使用HibernateTemplate保存方法保存学生模型对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆