尝试将对象保存到数据库时遇到了以下错误。我尝试了here1和here2提到的解决方案,但是效果不好。我遵循的是一个教程,但唯一的区别是Spring和Hibernate的版本。
我可以直接使用SessionFactory持久化对象,但是如果我使用HibernateDaoSupport尝试使用此方法,它将失败并显示以下错误
spring.xml
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
<property name="username" value="system" />
<property name="password" value="xxx" />
</bean>
<context:annotation-config/>
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="packagesToScan" value="org.sri.sphiber.model"></property>
<property name="hibernateProperties">
<props>
<prop key="dialect">org.hibernate.dialect.OracleDialect</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<bean id="customerDAOImpl" class="org.sri.sphiber.dao.CustomerDAOImpl">
<property name="hibernateTemplate" ref="hibernateTemplate" />
</bean>
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate4.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
CustomerDAOImpl.java
public class CustomerDAOImpl extends HibernateDaoSupport {
public boolean insertCustomer(Customer cust){
try {
getHibernateTemplate().saveOrUpdate(cust);
} catch (DataAccessException e) {
e.printStackTrace();
return false;
}
return true;
}
}
使用调用它。
public class MainClass {
public static void main(String[] args) {
ApplicationContext appContext = new ClassPathXmlApplicationContext("spring.xml");
CustomerDAOImpl hdi=appContext.getBean("customerDAOImpl",CustomerDAOImpl.class);
Customer customer=new Customer();
customer.setCustomerName("Sri");
boolean isUpdated = hdi.insertCustomer(customer);
}
}
错误信息。
Aug 10, 2014 12:45:52 AM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
INFO: HHH000232: Schema update complete
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$16.doInHibernate(HibernateTemplate.java:684)
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.saveOrUpdate(HibernateTemplate.java:681)
at org.sri.sphiber.dao.CustomerDAOImpl.insertCustomer(CustomerDAOImpl.java:16)
at org.sri.sphiber.main.MainClass.main(MainClass.java:26)
版本详细信息:
Spring version : spring-framework-4.0.6.RELEASE
Hibernate Version : hibernate-release-4.3.5.Final
Database : Orcale 11g
您缺少TransactionManager定义,请参阅http://docs.spring.io/spring-
framework/docs/current/spring-framework-
reference/html/transaction.html
[更新]以前我是用手机写的,所以很难提供详细信息,这是您需要做的:
Spring xml配置:
<tx:annotation-driven/>
将@Transactional批注添加到CustomerDaoImpl.insertCustomer方法
现在您的代码应该可以工作了。
请注意 ,@ Transactional批注应在服务层中使用,而不是在本示例中的DAO层中使用。
@Transactional注释告诉spring创建代理,该代理使用方面使用事务“包装”带注释的方法。
问题内容: 最近,我一直很烦人,但在Google和这个论坛上进行了一些研究之后,我仍然找不到能够解决我的问题的答案。 事情就是这样-有时,当我尝试使用hibernate更新或创建新对象时遇到以下错误: 真正奇怪的是,有时使用该方法更新对象会起作用,但是有时使用相同的对象并通过调用相同的方法却无法起作用,但这似乎取决于我如何在对象中获取对象。第一名。 示例:假设我有一个包含3个字段的表:id,类型,
我正在使用Spring和Hibernate处理一个现有的项目,我感到困惑,因为我得到了一个 有一个服务层使用进行注释,还有一个方法,该方法应该是事务性的,因此它使用进行注释。对我来说,这意味着spring应该自己处理事务。 在中执行保存时会发生错误。它被注释为。 我认为,让spring在服务层为保存创建一个会话和一个事务,而在DAOs中,hibernate模板将获得spring管理的当前会话和事务
我正在使用Spring和Hibernate处理一个现有的项目,我感到很困惑,因为我得到了一个 org.springframework.dao。InvalidDataAccessApiUsageException:只读模式下不允许写入操作(FlushMode.MANUAL):将会话转换为FlushMode。COMMIT/AUTO或从事务定义中删除“readOnly”标记。 尝试保存对象时出错,但我仍
问题内容: 我正在尝试在用户空间中使用mmap读取“ mem_map”开始的物理内存。它是一个包含所有物理页面的数组。这是一台运行3.0内核的i386计算机。 代码是这样的: 我以此为根。输出为: 可以肯定的是,我搜索了问题并将以下行添加到我的/etc/sysctl.conf文件中: 但这也不起作用。 谁知道为什么不允许这样的mem_map操作,以及如何解决呢? 谢谢。 问题答案: 听起来好像内核
在通过HTTPS访问REST api时,我希望使用Spring RestTemplate使用持久http连接。我不能使它工作;为每个请求创建一个新的连接,并且每次都进行SSL握手。有没有可能通过https使用RestTemplate进行可重用连接,如果有的话,如何配置它? 我设置了一个RestTemplate来通过HTTPS发出请求。那是正确的。然而,我在日志中注意到,每个请求都会发生一次新的SS
当我试图打开索引时。php在浏览器中我看到错误: 在error.log: 2013/11/04 22:40:07[错误]3435#0:*4发送到stderr的FastCGI:“无法打开主脚本:/var/www/index.php(不允许操作)”,同时从上游读取响应头,客户端:10.0。2.2,服务器:localhost,请求:“GET/HTTP/1.1”,上游:fastcgi://127.0.0.