- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我是 spring 的初学者,在我基于控制台的项目中,我将 spring 与 hibernate 结合使用。我被以下错误困扰了大约一天。
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.hibernate5.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1126)
at org.springframework.orm.hibernate5.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:619)
at org.springframework.orm.hibernate5.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:616)
at org.springframework.orm.hibernate5.HibernateTemplate.doExecute(HibernateTemplate.java:341)
at org.springframework.orm.hibernate5.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:309)
at org.springframework.orm.hibernate5.HibernateTemplate.save(HibernateTemplate.java:616)
at com.hbtemp.dao.impl.StudentDaoImpl.insertStudent(StudentDaoImpl.java:22)
at com.hbtemp.test.TestClass.main(TestClass.java:25)
我在网上搜索了这个错误,但我找不到解决方案,所以请帮我一些概念
模型类:Student.java
private int id;
private String firstName;
private String lastName;
private String address;
private int rollNo;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getRollNo() {
return rollNo;
}
public void setRollNo(int rollNo) {
this.rollNo = rollNo;
}
StudentDaoImpl.java
public void setHibernateTemplate(HibernateTemplate hibernateTemplate){
this.hibernateTemplate = hibernateTemplate;
}
@Override
public int insertStudent(Student student) {
hibernateTemplate.save(student);
return 0;
}
应用上下文.xml
<bean id = "dataSource" class = "org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name = "driverClassName" value = "com.mysql.jdbc.Driver"></property>
<property name = "url" value = "jdbc:mysql://localhost:3306/spring_jdbc_template"></property>
<property name = "username" value = "root"></property>
<property name = "password" value = ""></property>
</bean>
<bean id = "mySessionFactory" class = "org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name = "dataSource" ref = "dataSource"></property>
<property name = "mappingResources">
<list>
<value>student.hbm.xml</value>
</list>
</property>
<property name = "hibernateProperties">
<map>
<entry key="hibernate.dialect" value = "org.hibernate.dialect.MySQLDialect"></entry>
<!-- <entry key="hibernate.hbm2ddl.auto" value = "update"></entry> -->
<entry key="hibernate.show_sql" value = "true"></entry>
<entry key="checkWriteOperation" value = "false"></entry>
<entry key="current_session_context_class" value = "thread"></entry>
</map>
</property>
</bean>
<bean id = "hibernateTemplate" class = "org.springframework.orm.hibernate5.HibernateTemplate">
<property name = "sessionFactory" ref = "mySessionFactory"></property>
</bean>
<bean id = "studentDaoImpl" class = "com.hbtemp.dao.impl.StudentDaoImpl">
<property name = "hibernateTemplate" ref = "hibernateTemplate"></property>
</bean>
学生.hbm.xml :
<hibernate-mapping>
<class name = "com.hbtemp.model.Student" table = "student">
<id name = "id" column = "ID">
<generator class="identity"></generator>
</id>
<property name = "firstName" column = "FirstName"></property>
<property name = "lastName" column = "LastName"></property>
<property name = "address" column = "Address"></property>
<property name = "rollNo" column = "Roll_NO"></property>
</class>
测试类.java
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
StudentDaoImpl studentDaoImpl = (StudentDaoImpl)context.getBean("studentDaoImpl");
Student student = new Student();
student.setId(2);
student.setFirstName("Prakash");
student.setLastName("Gautam");
student.setAddress("Bhaktapur");
student.setRollNo(434);
int status = studentDaoImpl.insertStudent(student);
如果我在 insertStudent 方法 中编写代码 hibernateTemplate.setCheckWriteOperations(false) 它工作正常......但我的问题是...这是好习惯吗?如果不是很好的做法请推荐好的做法
最佳答案
在 spring 配置文件中添加 "",这肯定有效。
关于java - 将您的 Session 转换为 FlushMode.COMMIT/AUTO 或从事务定义中删除 'readOnly' 标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39467759/
已经通过 FlushMode 的 hibernate api 规范,但没有得到确切的区别。所以请帮忙。 最佳答案 如果在触发任何查询之前刷新模式为“AUTO”,则 hibernate 将检查是否有任何
好吧,我看到一些帖子问几乎相同的事情,但要点有点不同。 这是一个经典案例:我正在保存/更新一个实体,并且在 中相同的 session ,我正在尝试使用 FlushMode = Auto 从数据库中获取
在 Hibernate 中,我想知道当 flushMode 为 AUTO 时哪些条件会触发刷新?它可能很复杂(或“神奇”),但基本条件是什么? 谢谢 最佳答案 当 flush mode是 FlushM
您能给我一些在 Hibernate session 中使用 FlushMode.ALWAYS 的实际示例吗? 谢谢 最佳答案 这几乎总是不必要的。如果在 session 中进行的修改在刷新到数据库时导
根据 Session.setFlushMode(FlushMode)我们可以将 FlushMode 设置为 session 。现在我正在尝试测试Flushmode.COMMIT如何模式适用于一个小例子
我真的是 Spring 的新手我正在使用 JSF+Hibernate+Spring 开发一个简单的 JEE 应用程序我在尝试更新 DAO 上的值时遇到了一些问题我确定问题与 Spring 配置 xml
我已经将 NHibernate session 的 FlushMode 属性设置为 FlushMode.Never,但是当我调用 session.Save(User) 时,无论如何都会对数据库进行调用
我花了一些时间搜索如何配置 NHibernate 的 FlushMode,以便它只能保存我明确称为 Save/Update/Delete 的对象,但我发现我不能这样做。取而代之的是,当我使用 NHib
Grails 1.3.7 我们有一个合并2个用户的服务方法。由于数据量大,因此有很多内容,因此需要进行大量的读取,更新和写入。服务中有transactional = true。我了解Grails的默认
这个问题已经有答案了: EntityManger flushmode in JDBC (1 个回答) 已关闭 9 年前。 entityManager.setFlushMode(FlushModeTyp
我已将 spring security 插件与我的 grails 应用程序集成,该应用程序将 hibernate 作为 ORM 工具... 使用 Spring Security 插件,我的应用程序一切
帮助设置 hibernate 的刷新属性。 我遇到了错误。 在只读模式 (FlushMode.MANUAL) 下不允许写入操作:将您的 Session 转换为 FlushMode.COMMIT/AUT
我正在努力提高异步事务方法的性能。 在这个任务中,我必须从一个表中读取近 7500 条记录,对其进行详细说明,然后在另一个表中插入/更新相应的行。 我在 hibernate 中使用 spring da
所以...已经说过了: 如何在 C# 中将 FlushMode 更改为 Commit? 我的意思是,在 Fluent NHibernate 中,FlushMode 默认设置为 Auto。 所以...要
我的应用程序使用 FlushMode.AUTO 。对于特定的服务方法调用,我想将 Hibernate Session.FlushMode 更改为 FlushMode.COMMIT 并在方法完成时恢复为
我们目前正在将一个用 Spring/Hibernate 编写的遗留应用程序迁移到 Spring Boot(为了减少冗长的配置和其他好处)。 因为 Spring Boot 遵守 JPA,我们必须“迁移”
我想在没有 FlushMode.ALWAYS 的情况下运行一个单一的方法。 所以我需要 setFlushMode(FlushMode.COMMIT) 但我不知道该怎么做,我开始认为使用 spring
我读到是否调用 session.flush()提交与否取决于 FlushMode已设定。不过,我不知道是哪个FlushMode做这个。我希望 session 被刷新并提交。我应该使用哪种 FlushM
我有下一个代码: Color color = new Color(null,"B12",null,1); Session session=sessionFactory.openSess
我是 spring 的初学者,在我基于控制台的项目中,我将 spring 与 hibernate 结合使用。我被以下错误困扰了大约一天。 Exception in thread "main" org.
我是一名优秀的程序员,十分优秀!