스프링 데이터 JPA에서 두 테이블 도면요소 결합
나는 다음과 같은 질문을 쓰고 싶다.SELECT * FROM Release_date_type a LEFT JOIN cache_media b on a.id=b.idSpring Data JPA는 처음입니다.가입 쿼리에 엔티티를 쓰는 방법을 모릅니다.다음은 시도입니다.
@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대 또는 복수의 전화기를 소유하는 일반적인 예에 대해서는, 이 Wikibook 섹션을 참조해 주세요.
특정 예에서 관계를 설정할 경우 ReleaseDateType 모델에서 다음 코드를 변경해야 합니다.
@Column(nullable = true)
private Integer media_Id;
대상:
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name="CACHE_MEDIA_ID", nullable=true)
private CacheMedia cacheMedia ;
또한 Cache Media 모델에서는 다음을 추가해야 합니다.
@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그리고.@ManyToOneReleaseDateType 모델의 다음 코드를 변경해야 합니다.
@Column(nullable = true)
private Integer media_Id;
대상:
@OneToMany(cascade=ALL, mappedBy="ReleaseDateType")
private List<CacheMedia> cacheMedias ;
또한 Cache Media 모델에서는 다음을 추가해야 합니다.
@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);
@Query("SELECT rd FROM ReleaseDateType rd, CacheMedia cm WHERE ...")
이것은 오래된 질문이었지만 해결책은 매우 간단하다.휴지 상태에서 기준, 조인 등을 쓰는 방법을 잘 모를 경우 네이티브 쿼리를 사용하는 것이 가장 좋습니다.이로 인해 성능이 저하되지 않고 매우 유용합니다.아래 예
@Query(nativeQuery = true, value = "your sql query")
returnTypeOfMethod methodName(arg1, arg2);
언급URL : https://stackoverflow.com/questions/19977130/joining-two-table-entities-in-spring-data-jpa
'programing' 카테고리의 다른 글
| 다른 콘텐츠를 로드한 후 Select 2 드롭다운 메뉴를 새로 고치는 방법 (0) | 2023.03.05 |
|---|---|
| JSON.parse가 개체 대신 문자열을 반환합니다. (0) | 2023.03.05 |
| API 앱과 웹 앱의 차이점은 무엇입니까? (0) | 2023.03.05 |
| WooCommerce를 구매하려면 등록이 필요합니다. (0) | 2023.03.05 |
| 'React Owner만 참조할 수 있다'는 것은 무슨 뜻입니까? (0) | 2023.03.05 |