Je veux écrire une signature de méthode d’interface de référentiel JPA Spring Data qui me permettra de trouver des entités avec une propriété d’un object incorporé dans cette entité. Est-ce que quelqu’un sait si c’est possible, et si oui comment?
Voici mon code:
@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 Ssortingng bookId; @NotNull @Enumerated(EnumType.STRING) private Region region; ... } public interface QueuedBookRepo extends JpaRepository { //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 findByRegion(Region region, Pageable pageable); }
Puis-je écrire une requête à l’aide de Spring Data?
Ce nom de méthode devrait faire l’affaire:
Page findByBookIdRegion(Region region, Pageable pageable);
Plus d’informations à ce sujet dans la section sur la dérivation des requêtes des documents de référence.
Le précédent – findByBookIdRegion () ne fonctionnait pas pour moi. Les éléments suivants fonctionnent avec la dernière version de Ssortingng Data JPA:
Page findByBookId_Region(Region region, Pageable pageable);
Si vous utilisez BookId comme clé primaire combinée, n’oubliez pas de modifier votre interface à partir de:
public interface QueuedBookRepo extends JpaRepository {
à:
public interface QueuedBookRepo extends JpaRepository {
Et changez l’annotation @Embedded en @EmbeddedId, dans votre classe QueuedBook comme ceci:
public class QueuedBook implements Serializable { @EmbeddedId @NotNull private BookId bookId; ... }