임베디드 객체 속성별로 스프링 데이터 JPA 찾기
Spring Data JPA 저장소 인터페이스 메서드 시그니처를 작성하여 해당 엔티티에 포함된 객체의 속성을 가진 엔티티를 찾습니다.이것이 가능한지, 가능하다면 어떻게 할 수 있는지 아는 사람이 있습니까?
제 코드는 다음과 같습니다.
@Entity
@Table(name = "BOOK_UPDATE_QUEUE", indexes = { uniqueConstraints = @UniqueConstraint(columnNames = {
"bookId", "region" }, name = "UK01_BOOK_UPDATE_QUEUE"))
public class QueuedBook implements Serializable {
@Embedded
@NotNull
private BookId bookId;
...
}
@Embeddable
public class BookId implements Serializable {
@NotNull
@Size(min=1, max=40)
private String bookId;
@NotNull
@Enumerated(EnumType.STRING)
private Region region;
...
}
public interface QueuedBookRepo extends JpaRepository<QueuedBook, Long> {
//I'd like to write a method like this, but can't figure out how to search by region,
//when region is actually a part of the embedded BookId
Page<QueuedBook> findByRegion(Region region, Pageable pageable);
}
Spring Data를 사용하여 이에 대한 쿼리를 작성할 수 있습니까?
이 메서드명은 다음과 같은 기능을 합니다.
Page<QueuedBook> findByBookIdRegion(Region region, Pageable pageable);
이에 대한 자세한 내용은 참조 문서의 쿼리 도출에 대한 섹션을 참조하십시오.
위의 findByBookIdRegion()은 나에게 효과가 없었습니다.다음은 String Data JPA의 최신 릴리스와 연동됩니다.
Page<QueuedBook> findByBookId_Region(Region region, Pageable pageable);
BookId를 조합된 프라이머리 키로 사용하는 경우 인터페이스를 다음 위치에서 변경해야 합니다.
public interface QueuedBookRepo extends JpaRepository<QueuedBook, Long> {
대상:
public interface QueuedBookRepo extends JpaRepository<QueuedBook, BookId> {
QueuedBook 클래스에서 주석 @Embedded를 @EmbeddedId로 변경합니다.
public class QueuedBook implements Serializable {
@EmbeddedId
@NotNull
private BookId bookId;
...
제 말에 따르면 스프링이 모든 사건을 쉽게 처리하지는 않는다고 합니다.당신의 경우, 다음과 같은 것이 효과적일 것입니다.
Page<QueuedBook> findByBookIdRegion(Region region, Pageable pageable);
또는
Page<QueuedBook> findByBookId_Region(Region region, Pageable pageable);
단, 이는 또한 에 있는 필드의 명명 규칙에 따라 달라집니다.@Embeddable
학급,
예: 다음 필드는 위에서 언급한 스타일에서는 작동하지 않을 수 있습니다.
private String cRcdDel;
두 가지 케이스를 모두 사용해 보았더니 효과가 없었습니다(Spring은 이러한 종류의 명명 규칙을 취급하지 않는 것 같습니다(특히 첫 번째 - 두 번째 글자에서는 대문자만 취급하고 있는 것 같습니다).
Page<QueuedBook> findByBookIdCRcdDel(String cRcdDel, Pageable pageable);
또는
Page<QueuedBook> findByBookIdCRcdDel(String cRcdDel, Pageable pageable);
열 이름을 다음으로 변경했을 때
private String rcdDel;
다음 솔루션은 문제없이 정상적으로 동작합니다.
Page<QueuedBook> findByBookIdRcdDel(String rcdDel, Pageable pageable);
또는
Page<QueuedBook> findByBookIdRcdDel(String rcdDel, Pageable pageable);
언급URL : https://stackoverflow.com/questions/24441411/spring-data-jpa-find-by-embedded-object-property
'source' 카테고리의 다른 글
날짜 PHP에서 주 번호(년)를 가져옵니다. (0) | 2022.11.04 |
---|---|
backbone.js의 목적은 무엇입니까? (0) | 2022.11.04 |
Python에서 검출된 예외의 이름을 얻는 방법은 무엇입니까? (0) | 2022.11.04 |
HashSet과 Set의 차이점은 무엇입니까? (0) | 2022.11.04 |
C 코드를 작성하여 직사각형의 면적을 계산합니다.calculate라는 이름의 단일 함수를 사용하여 면적을 계산합니다. (0) | 2022.11.04 |