[SPRING] Spring Data JPA에서 두 개의 테이블 엔티티 조인
SPRINGSpring Data JPA에서 두 개의 테이블 엔티티 조인
SELECT * FROM Release_date_type a.id = b.id의 LEFT JOIN cache_media b와 같은 쿼리를 작성하고 싶습니다. Spring Data JPA를 처음 사용합니다. Join 쿼리에 대한 엔티티를 작성하는 방법을 모르겠습니다. 다음은 시도입니다.
@Entity
@Table(name = "Release_date_type")
public class ReleaseDateType {
@Id
@GeneratedValue(strategy=GenerationType.TABLE)
private Integer release_date_type_id;
// ...
@Column(nullable = true)
private Integer media_Id;
// with getters and setters...
}
또 다른 실체는 :
@Entity
@Table(name = "Cache_Media")
public class CacheMedia {
@Id
@GeneratedValue(strategy=GenerationType.TABLE)
private Integer id;
// ...
private Date loadDate; //with the getter and setter ..
}
나는 crudRepository 인터페이스를 쓰고 싶다.
public interface ReleaseDateTypeRepository extends CrudRepository<ReleaseDateType, Long>{
@Query("SELECT * FROM Release_date_type a LEFT JOIN cache_media b on a.id=b.id")
public List<ReleaseDateType> FindAllWithDescriptionQuery();
}
해결법
-
==============================
1.하나 이상의 휴대폰을 소유 한 직원의 전형적인 예는이 위키 책 섹션을 참조하십시오.
하나 이상의 휴대폰을 소유 한 직원의 전형적인 예는이 위키 책 섹션을 참조하십시오.
예를 들어, 일대일 관계를 수행하려면 ReleaseDateType 모델에서 다음 코드를 변경해야합니다.
@Column(nullable = true) private Integer media_Id;
에 대한:
@OneToOne(fetch = FetchType.LAZY) @JoinColumn(name="CACHE_MEDIA_ID", nullable=true) private CacheMedia cacheMedia ;
CacheMedia 모델에서는 다음을 추가해야합니다.
@OneToOne(cascade=ALL, mappedBy="ReleaseDateType") private ReleaseDateType releaseDateType;
저장소에서 다음을 대체해야합니다.
@Query("Select * from A a left join B b on a.id=b.id") public List<ReleaseDateType> FindAllWithDescriptionQuery();
으로:
//In this case a query annotation is not need since spring constructs the query from the method name public List<ReleaseDateType> findByCacheMedia_Id(Integer id);
또는 :
@Query("FROM ReleaseDateType AS rdt WHERE cm.rdt.cacheMedia.id = ?1") //This is using a named query method public List<ReleaseDateType> FindAllWithDescriptionQuery(Integer id);
또는 @OneToMany와 @ManyToOne 관계를 원한다면 ReleaseDateType 모델의 다음 코드를 변경해야합니다.
@Column(nullable = true) private Integer media_Id;
에 대한:
@OneToMany(cascade=ALL, mappedBy="ReleaseDateType") private List<CacheMedia> cacheMedias ;
CacheMedia 모델에서는 다음을 추가해야합니다.
@ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name="RELEASE_DATE_TYPE_ID", nullable=true) private ReleaseDateType releaseDateType;
저장소에서 다음을 대체해야합니다.
@Query("Select * from A a left join B b on a.id=b.id") public List<ReleaseDateType> FindAllWithDescriptionQuery();
으로:
//In this case a query annotation is not need since spring constructs the query from the method name public List<ReleaseDateType> findByCacheMedias_Id(Integer id);
또는 :
@Query("FROM ReleaseDateType AS rdt LEFT JOIN rdt.cacheMedias AS cm WHERE cm.id = ?1") //This is using a named query method public List<ReleaseDateType> FindAllWithDescriptionQuery(Integer id);
from https://stackoverflow.com/questions/19977130/joining-two-table-entities-in-spring-data-jpa by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] @ComponentScan에서 @Component 제외 (0) | 2018.12.11 |
---|---|
[SPRING] 스프링 보안 및 JSON 인증 (0) | 2018.12.11 |
[SPRING] Spring AOP에서의 프록시 사용 (0) | 2018.12.11 |
[SPRING] 스프링 부트에서 HTTP 응답 캐싱을 사용하는 방법 (0) | 2018.12.11 |
[SPRING] Spring 부트 애플리케이션의 환경 특정 application.properties 파일 (0) | 2018.12.11 |