无法在DAOImplementation类中使用HibernateTemplate保存方法保存学生模型对象 [英] Unable to save Student model object using HibernateTemplate save method in DAOImplementation class
问题描述
这是执行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屋!
查看全文