복붙노트

[SPRING] 스프링 3으로 구성된 JPA를 얻는 방법은 무엇입니까?

SPRING

스프링 3으로 구성된 JPA를 얻는 방법은 무엇입니까?

스프링의 문서를 읽었지만 조금 혼란 스럽다. JPA를 구성하는 방법에 대한 몇 가지 다른 옵션이있다.

스프링 3으로 구성된 JPA 2 (최대 절전 모드 포함)를 얻는 가장 좋은 방법은 무엇입니까? pom, web.xml, applicationContext.xml 및 필요한 Java 코드의 예가 있으면 친절하게도 게시하십시오.

감사!

해결법

  1. ==============================

    1.EclipseLink를 사용하지만 구성이 매우 유사해야합니다. 여기에는 가장 중요한 부분이 있습니다.

    EclipseLink를 사용하지만 구성이 매우 유사해야합니다. 여기에는 가장 중요한 부분이 있습니다.

    Pom.hml :

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>eclipselink</artifactId>
            <version>2.0.1</version> 
        </dependency>
        <dependency> 
            <groupId>javax.persistence</groupId>
            <artifactId>javax.persistence</artifactId>
            <version>2.0.0</version>
        </dependency>
    

    persistence.xml :

        <?xml version="1.0" encoding="UTF-8" ?>
        <persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
        http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
        version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
    
        <persistence-unit name="persistenceUnit" transaction-type="RESOURCE_LOCAL" />
    
    </persistence>
    

    응용 프로그램 컨텍스트 - .XML :

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="persistenceXmlLocation" value="classpath:persistence.xml" />
        <property name="persistenceUnitName" value="persistenceUnit" /> 
        <property name="dataSource" ref="dataSource"/>
        <property name="jpaPropertyMap">
            <props>
                <prop key="eclipselink.weaving">false</prop>
            </props>
        </property>
    </bean>
    
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
    </bean>
    <tx:annotation-driven transaction-manager="transactionManager" />
    

    User.java:

    @Entity
    public class User {
    
        @Id
        @GeneratedValue(strategy = GenerationType.SEQUENCE)
        private Integer id;
    
        private String name;
    
        // Getters and setters
    
    }
    

    UserDao.java:

    @Repository
    public class JpaUserDao implements UserDao {
    
        @PersistenceContext
        private EntityManager em;
    
        @Override
        public Item get(Integer id) {
            return em.find(User.class, id);
        }
    }
    

    UserService.java:

    @Service 
    public class UserServiceImpl implements UserService {
    
        @Autowired
        private UserDao userDao;
    
        @Transactional
        @Override
        public User getUser(Integer id) {
            return userDao.get(id);
        }
    
    }
    

    희망이 도움이됩니다.

  2. ==============================

    2.또는 Spring 3+와 JPA 2.0을 동적 프록시의 도움으로 통합 할 수 있습니다.

    또는 Spring 3+와 JPA 2.0을 동적 프록시의 도움으로 통합 할 수 있습니다.

    여기에서 모든 문서와 다운로드 예제를 찾을 수 있습니다.

    이 경우 명명 된 JPA 쿼리와의 인터페이스가 쿼리를 실행하는 데 사용됩니다. 인터페이스는 동적 프록시의 도움으로 일반 Spring Bean으로 처리됩니다. 같은 방식으로 다른 bean에 주입 (또는 autowired) 될 수 있습니다.

    또한 쿼리는 별도의 orm-mapping.xml 파일에 있으며 도메인별로 (또는 사용자의 편의에 따라) 분할 될 수 있습니다. 이는 지속적인 계층에 높은 유연성과 유지 보수성을 제공합니다.

    public interface OrganisationQueries {
    
            @Query(named = "find.organisation.by.role.id")
            public Organisation findOrganisationByRoleId(Long roleId);
    
            @Query(named = "find.all.organisations")
            public List<Organisation> findAllOrganisations();
        }
        public class OrganisationServiceImpl implements OrganisationService {
            @PersistenceContext
            private EntityManager em;
            @Autowired
            private OrganisationQueries organisationQueries;
            @Override
            public Organisation findOrganisationByRoleId(Long roleId) {
                return organisationQueries.findOrganisationByRoleId(roleId);
            }
            @Override
            public List<Organisation> findAllOrganisations() {
                return organisationQueries.findAllOrganisations();
            }
        }
    
       <entity-mappings xmlns="..." version="1.0">
          <named-query name="find.organisation.by.role.id">
              <query><![CDATA[
                        select r.organisation from Role r
                        where r.id =?1
              ]]></query>
          </named-query>
          <named-query name="find.all.organisations">
               <query><![CDATA[
                       select org from Organisation org
                        left join fetch org.organisationType
               ]]></query>
           </named-query>
       </entity-mappings>
    
  3. ==============================

    3.Spring Roo를 살펴 보시고, pom과 필요한 모든 설정 파일 (예 : JPA)과 함께 Spring 웹 프로젝트를 생성 해주십시오. Roo가 마음에 들지 않는다면 그걸 버리고 일반적인 Spring 웹 애플리케이션처럼 프로젝트를 위협 할 수 있습니다. IMHO는 초기 프로젝트 설정을하는 가장 빠른 방법입니다.

    Spring Roo를 살펴 보시고, pom과 필요한 모든 설정 파일 (예 : JPA)과 함께 Spring 웹 프로젝트를 생성 해주십시오. Roo가 마음에 들지 않는다면 그걸 버리고 일반적인 Spring 웹 애플리케이션처럼 프로젝트를 위협 할 수 있습니다. IMHO는 초기 프로젝트 설정을하는 가장 빠른 방법입니다.

  4. from https://stackoverflow.com/questions/5373035/how-to-get-jpa-configured-with-spring-3 by cc-by-sa and MIT license