복붙노트

[SPRING] EntityManager는 persist를 사용하여 요소를 데이터베이스에 저장할 수 없습니다.

SPRING

EntityManager는 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. ==============================

    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. ==============================

    2.이 문제가 여전히 발생하고 모든 구성이 정상적으로 작동하는 경우 트랜잭션 관리자가 식별하거나 관리하기 위해 @Transaction 주석이 달린 메소드가 공개되어 있고 보호되지 않았는지 확인하십시오.

    이 문제가 여전히 발생하고 모든 구성이 정상적으로 작동하는 경우 트랜잭션 관리자가 식별하거나 관리하기 위해 @Transaction 주석이 달린 메소드가 공개되어 있고 보호되지 않았는지 확인하십시오.

  3. from https://stackoverflow.com/questions/12937394/entitymanager-cannot-use-persist-to-save-element-to-database by cc-by-sa and MIT license