스프링이 있는 JPA

7458 단어 jpaspringjava
Spring에서 JPA를 사용하려면 다음 4단계를 구현해야 합니다.

엔터티에서 매핑 메타데이터 정의



다음 주석을 사용합니다.
  • 개체: 필수. 클래스를 JPA 영구 클래스로 표시
  • 테이블: DB에서 사용할 정확한 테이블 이름을 지정합니다(지정하지 않으면 클래스 이름이 됨).
  • 아이디: 필수. 데이터베이스에서 기본 키로 사용할 필드를 나타냅니다
  • .
  • 열: 테이블의 열 이름(지정하지 않으면 필드 이름이 됨)
  • OneToMany: 일대다 관계의 '일' 쪽에 있는 필드를 식별합니다
  • .
  • JoinColumn: 조인할 때 사용할 열이 포함된 '다수' 테이블의 열을 식별합니다. 일반적으로 외래 키입니다.
  • 일시적: 데이터베이스에 저장되지 않음

  • @Entity
    @Table(name="T_ACCOUNT")
    public class Account {
    
        @Id
        @Column(name="ID")
        private Long entityId;
    
        @Transient
        private String number;
        ...
    }
    


    EntityManagerFactory 빈 정의




        @Bean
        public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
            HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
            adapter.setShowSql(true);
            adapter.setGenerateDdl(true); // creating/updating tables (be careful)
            adapter.setDatabase(Database.HSQL);
            Properties props = new Properties();
            props.setProperty("hibernate.format_sql", "true");
            LocalContainerEntityManagerFactoryBean emfb = 
                new LocalContainerEntityManagerFactoryBean();
            emfb.setDataSource(dataSource());
            emfb.setPackagesToScan("com");
            emfb.setJpaProperties(props);
            emfb.setJpaVendorAdapter(adapter);
            return emfb;
        }
    


    트랜잭션 관리자 및 DataSource 빈 정의




        @Bean
        public PlatformTransactionManager transactionManager(EntityManagerFactory emf) {
            return new JpaTransactionManager(emf);
        }
    
        @Bean
        public DataSource dataSource(){
            return
                (new EmbeddedDatabaseBuilder())
                .addScript("classpath:schema.sql")
                .addScript("classpath:data.sql")
                .build();
        }
    


    저장소/DAO 정의




    @Repository("accountRepository")
    public class JpaAccountRepository implements AccountRepository {
    
        @PersistenceContext
        private EntityManager entityManager;
    
        @Override
        public Account findByNumber(String number) {
            String jpql = "SELECT a FROM Account a where a.number = :number";
            Account account = entityManager.createQuery(jpql, Account.class)
                    .setParameter("number", number).getSingleResult();
            return account;
        }
    }
    

    좋은 웹페이지 즐겨찾기