Я хочу написать сигнатуру метода интерфейса репозитория 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?
java
spring
jpa
spring-data
spring-data-jpa
CorayThan
источник
источник
findByBookIdRegion(Region region, Pageable pageable)
получается?Ответы:
Это имя метода должно помочь:
Подробнее об этом в разделе о формировании запросов справочной документации.
источник
One findByIdAndTwoId(Long oneId, Long twoId);
и получаю запрос в форме:select ...... from one one_ left outer join two two_ on one_.two_id = two_.id where one_id = ? and two_.id = ?
Вышеупомянутое - findByBookIdRegion () у меня не сработало. Следующее работает с последней версией String Data JPA:
источник
Если вы используете BookId в качестве комбинированного первичного ключа, не забудьте изменить свой интерфейс с:
кому:
И измените аннотацию @Embedded на @EmbeddedId в своем классе QueuedBook следующим образом:
источник
По моему мнению, Spring не во всех случаях легко справляется. В вашем случае следующее должно помочь
или
Однако это также зависит от соглашения об именах полей, которые у вас есть в вашем
@Embeddable
классе,например, следующее поле может не работать ни в одном из стилей, упомянутых выше
Я пробовал с обоими случаями (как показано ниже), и это не сработало (похоже, что Spring не обрабатывает этот тип соглашений об именах (то есть для многих заглавных букв, особенно в начале - 2-я буква (не уверен, что это хотя единственный случай)
или
Когда я переименовал столбец в
мои следующие решения работают нормально без каких-либо проблем:
ИЛИ
источник