[SPRING] EntityManager는 persist를 사용하여 요소를 데이터베이스에 저장할 수 없습니다.
SPRINGEntityManager는 persist를 사용하여 요소를 데이터베이스에 저장할 수 없습니다.
EntityManager를 사용하여 데이터베이스에 요소를 저장하는 문제를 만났습니다. 발견 한 답을 바탕으로 DaoJa에서 4 가지 방법을 시도했지만 실패했습니다. 여기에 제가 시도한 네 가지 방법을 첨부했습니다 :
컨트롤러 부분의 코드 :
@Transactional
SmartProduct smartProduct = new SmartProduct();
smartProduct.setName("Dove Soap");
smartProductDao.persist(smartProduct);
1. DAO JP A :
@Transactional
public void persist(SmartProduct smartProduct) {
entityManager.persist(smartProduct);
작동하지 않습니다!
2.
@Transactional
public void persist(SmartProduct smartProduct) {
entityManager.persist(smartProduct);
entityManager.flush();
3.
@Transactional
public void persist(SmartProduct smartProduct) {
EntityTransaction emTransaction = entityManager.getTransaction();
emTransaction.begin();
entityManager.persist(smartProduct);
emTransaction.commit();
entityManager.close();
4.
@Transactional
public void persist(SmartProduct smartProduct) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistenceUnit");
EntityManager em = emf.createEntityManager();
EntityTransaction etx = em.getTransaction();
etx.begin();
em.persist(smartProduct);
etx.commit();
em.close();
emf.close();
누군가 제발 문제를 알아낼 수 있도록 도와 주시겠습니까? 미리 많은 감사드립니다!
많은 사람들이 JustinKSU의 도움에 감사합니다. Spring 컨텍스트에서 주석을 추가 한 다음 해결했습니다! 내 Spring 컨텍스트의 이전 버전은 다음과 같습니다.
<bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<tx:annotation-driven mode="aspectj" transaction-manager="transactionManager" />
<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory">
<property name="persistenceUnitName" value="persistenceUnit" />
<property name="dataSource" ref="dataSource" />
</bean>
추가 후
<tx:annotation-driven />
작동 :
<tx:annotation-driven />
<bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<tx:annotation-driven mode="aspectj" transaction-manager="transactionManager" />
<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory">
<property name="persistenceUnitName" value="persistenceUnit" />
<property name="dataSource" ref="dataSource" />
</bean>
해결법
-
==============================
1.Spring 컨텍스트에서 @Transactional을 활성화하려면 다음이 있어야합니다.
Spring 컨텍스트에서 @Transactional을 활성화하려면 다음이 있어야합니다.
스프링 버전에 적합합니다.
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
특수 효과 사용 :
<tx:annotation-driven />
엔티티 관리자를 삽입하는 트랜잭션 관리자를 선언하십시오.
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory" /> </bean>
-
==============================
2.이 문제가 여전히 발생하고 모든 구성이 정상적으로 작동하는 경우 트랜잭션 관리자가 식별하거나 관리하기 위해 @Transaction 주석이 달린 메소드가 공개되어 있고 보호되지 않았는지 확인하십시오.
이 문제가 여전히 발생하고 모든 구성이 정상적으로 작동하는 경우 트랜잭션 관리자가 식별하거나 관리하기 위해 @Transaction 주석이 달린 메소드가 공개되어 있고 보호되지 않았는지 확인하십시오.
from https://stackoverflow.com/questions/12937394/entitymanager-cannot-use-persist-to-save-element-to-database by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 봄 mvc에서 래핑 된 예외 처리 (0) | 2019.02.19 |
---|---|
[SPRING] JSONObject를 Java 객체로 변환하기 (0) | 2019.02.19 |
[SPRING] Spring MVC 매핑에서 우선 순위를 어떻게 설정합니까? (0) | 2019.02.19 |
[SPRING] Spring Jndi 컨텍스트와 PropertyPlaceholderConfigurer (0) | 2019.02.18 |
[SPRING] 조건부로 콩을 선언 할 수 있습니까? (0) | 2019.02.18 |