springframework query org jparepository example data java spring jpa spring-data spring-data-jpa

java - query - Spring Data JPA encuentra por propiedad de objeto incrustado



spring data jpa query optional parameters (3)

Quiero escribir una firma de método de interfaz de repositorio JPA de Spring Data que me permita encontrar entidades con una propiedad de un objeto incrustado en esa entidad. ¿Alguien sabe si esto es posible y, de ser así, cómo?

Aquí está mi código:

@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); }

¿Puedo escribir una consulta para esto usando Spring Data?


El nombre de este método debería ser el truco:

Page<QueuedBook> findByBookIdRegion(Region region, Pageable pageable);

Más información sobre eso en la sección sobre derivación de consulta de los documentos de referencia.


Lo anterior - findByBookIdRegion () no funcionó para mí. Lo siguiente funciona con la última versión de String Data JPA:

Page<QueuedBook> findByBookId_Region(Region region, Pageable pageable);


Si está utilizando BookId como una clave principal combinada, recuerde cambiar su interfaz de:

public interface QueuedBookRepo extends JpaRepository<QueuedBook, Long> {

a:

public interface QueuedBookRepo extends JpaRepository<QueuedBook, BookId> {

Y cambie la anotación @ Embebida en @EmbeddedId, en su clase QueuedBook como esta:

public class QueuedBook implements Serializable { @EmbeddedId @NotNull private BookId bookId; ... }