2017-12-18 2 views
0

저장 서비스에서 업데이트 된 원래 개체를 만드는 방법 :Hibernate는 5.x 및 봄 데이터 2.X : 나는에서 웹 응용 프로그램을 업그레이드하고 방법

봄 (MVC) 4.2.9.RELEASE, 4.3 최대 절전 모드 .8.Final 및 1.7.1.RELEASE

봄 (MVC) 5.0.2.RELEASE, 최대 절전 모드 5.2.12.Final, 그리고 봄 데이터 2.0.2.RELEASE.

웹 응용 프로그램은 Windows 및 MS SQL Server 2014 Enterprise에서 실행됩니다.

업그레이드로 인해 Hibernate 및 JPA의 설정을 변경하지 않았습니다. 그러나 이제 프로그램은 매우 다르게 동작합니다. 아래에서 설명합니다.

다음은 새 Account 개체를 저장하고 새 개체 인 경우 해당 값을 업데이트 한 다음 반환하는 응용 프로그램의 typcial 서비스 메서드입니다.

1 단계 : 여기서

@Override 
@Transactional 
public Account saveAccount(Account acc) { 

    //Step 1 
    //save method from Spring Data 
    accountRepository.save(acc); 

    //stringId is set manually only once and it is set only when a new accout object is created 
    if (acc.getStringId() == null) { 

     //Step 2 
     acc.setStringId("some_string_id"); 
    } 

    return acc; 
} 

업그레이드 전에 동작이다 ACC가 동일 이것은 servie 방법이다

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private Long id; 

다음과 같이 계정 오브젝트는 ID 필드 정의한 저장 후 개체. 저장 후 ID 필드가 null에서 Long 값으로 업데이트됩니다.

2 단계 : 새 값이 자동으로 데이터베이스에 직렬화됩니다. save 메소드에 대한 명시적인 데이터베이스 호출이 없다는 점에 유의하십시오.

1 단계 : 만 ACC 개체를 업데이트하지 않습니다 accountRepository.save(acc)를 사용하여 여기에

는 업그레이드 후 동작입니다.

acc = accountRepository.save(acc) 

2 단계 : 새 id를 가진 객체를 얻기 위해, 나는 그것을 다음과 같은 방법을해야 할 문자열 ID가 새로운 객체에 저장되지 않습니다.

나는 시스템을 업그레이드하기 전에 작동시키는 방법을 찾고있다. 그 이유는 응용 프로그램이 사소하지 않고 응용 프로그램을 통해 프로그래밍 패턴 (좋든 나쁘 던지)을 따랐기 때문입니다. 나는 많은 변화와 재 테스트를 피하고 싶다.

다음은 관련 구성

에게 있습니다
<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:p="http://www.springframework.org/schema/p" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xmlns:aop="http://www.springframework.org/schema/aop" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:jpa="http://www.springframework.org/schema/data/jpa" 
     xmlns:jdbc="http://www.springframework.org/schema/jdbc" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation=" 
      http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context-3.2.xsd 
      http://www.springframework.org/schema/data/jpa  
      http://www.springframework.org/schema/data/jpa/spring-jpa-1.1.xsd        
      http://www.springframework.org/schema/tx 
      http://www.springframework.org/schema/tx/spring-tx-3.2.xsd 
      http://www.springframework.org/schema/jdbc 
      http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd"> 

    <bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close"> 
     <constructor-arg ref="hikariConfig" /> 
    </bean> 

    <bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig"> 
     <property name="poolName" value="derek6HikariCP" /> 
     <property name="connectionTestQuery" value="${jdbc.connectionTestQuery}" /> 
     <property name="dataSourceClassName" value="${jdbc.dataSourceClassName}" /> 
     <property name="maximumPoolSize" value="${jdbc.maximumPoolSize}" /> 
     <property name="minimumIdle" value="${jdbc.minimumIdle}" /> 
     <property name="idleTimeout" value="${jdbc.idleTimeout}" /> 
     <property name="connectionTimeout" value="${jdbc.connectionTimeout}" /> 
     <property name="dataSourceProperties"> 
      <props> 
       <prop key="url">${jdbc.url}</prop> 
       <prop key="user">${jdbc.username}</prop> 
       <prop key="password">${jdbc.password}</prop> 
      </props> 
     </property>  
    </bean> 

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
     <constructor-arg ref="dataSource"/> 
    </bean> 

    <bean id="entityManagerFactory" name="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" /> 
     </property> 
     <property name="packagesToScan" value="myproject.entity" /> 
     <property name="jpaProperties"> 
      <props> 
       <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
       <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> 
       <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> 
       <prop key="hibernate.max_fetch_depth">${hibernate.max_fetch_depth}</prop>         
       <prop key="hibernate.jdbc.fetch_size">${hibernate.jdbc.fetch_size}</prop> 
       <prop key="hibernate.jdbc.batch_size">${hibernate.jdbc.batch_size}</prop> 
      </props> 
     </property> 
    </bean>  

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
     <property name="entityManagerFactory" ref="emf" /> 
    </bean> 

    <tx:annotation-driven transaction-manager="transactionManager"/> 

    <context:annotation-config /> 

    <jpa:repositories base-package="myproject.entity" 
     entity-manager-factory-ref="emf" transaction-manager-ref="transactionManager" /> 

</beans> 
어떤 도움을 너무 많이

감사합니다!

답변

관련 문제