[SPRING] 읽기 전용 모드에서는 쓰기 작업이 허용되지 않습니다. - 지속되는 동안 문제가 발생합니다.
SPRING읽기 전용 모드에서는 쓰기 작업이 허용되지 않습니다. - 지속되는 동안 문제가 발생합니다.
개체를 데이터베이스에 저장하려고 할 때 아래 오류가 발생했습니다. 나는 여기서 언급 한 해결책을 시도했지만, 좋지는 않았다. 나는 튜토리얼을 따르고 있었지만 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
해결법
-
==============================
1.TransactionManager 정의가 누락되었습니다. http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/transaction.html을 참조하십시오.
TransactionManager 정의가 누락되었습니다. http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/transaction.html을 참조하십시오.
[최신 정보] 이전에는 휴대 전화로 편지를 쓰고 있었으므로 세부 정보를 제공하기가 어려웠습니다. 다음은 수행해야 할 작업입니다.
이제 코드가 작동합니다. @Transactional 어노테이션은이 예와 같이 DAO 계층이 아닌 서비스 계층에서 사용해야합니다. @Transactional annotation은 애노테이션이 적용된 메소드와 애스펙트를 사용하는 트랜잭션을 "래핑 (wrap)"하는 프록시를 생성하도록 스프링에게 지시한다.
-
==============================
2.구성 파일
구성 파일
변경하십시오 : -
@Configuration @EnableTransactionManagement <-----Put this line public PersistenceConfig{ //your code }
(또는)
@Bean @Autowired public HibernateTemplate getHibernateTemplate(SessionFactory session) { HibernateTemplate hb = new HibernateTemplate(); hb.setCheckWriteOperations(false); hb.setSessionFactory(session); return hb; }
from https://stackoverflow.com/questions/25222341/write-operations-are-not-allowed-in-read-only-mode-issue-while-persisting by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 봄 검증 사용자 정의 메시지 - 필드 이름 (0) | 2019.01.24 |
---|---|
[SPRING] Ajax 요청을 사용하여 스프링 컨트롤러에서 뷰를 반환하는 방법은 무엇입니까? (0) | 2019.01.24 |
[SPRING] SpringMVC 사용자 정의 컬렉션 편집기가 Jsp로 데이터를 반환하지 않음 (0) | 2019.01.24 |
[SPRING] PostGIS 기하 저장 중 : "잘못된 엔디안 플래그 값이 발생했습니다." (0) | 2019.01.24 |
[SPRING] Spring @Autowired 같은 유형의 2 개의 콩 (0) | 2019.01.24 |