Ich möchte eine Signatur der Spring Data JPA-Repository-Schnittstellenmethode schreiben, mit der ich Entitäten mit der Eigenschaft eines eingebetteten Objekts in dieser Entität finden kann. Weiß jemand, ob und wie dies möglich ist?
Hier ist mein 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 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);
}
Kann ich mit Spring Data eine Abfrage dazu schreiben?
java
spring
jpa
spring-data
spring-data-jpa
CorayThan
quelle
quelle
findByBookIdRegion(Region region, Pageable pageable)
den Trick nicht?Antworten:
Dieser Methodenname sollte den Trick machen:
Weitere Informationen hierzu finden Sie im Abschnitt zur Ableitungsableitung der Referenzdokumente.
quelle
One findByIdAndTwoId(Long oneId, Long twoId);
und führt zu einer Abfrage des Formulars:select ...... from one one_ left outer join two two_ on one_.two_id = two_.id where one_id = ? and two_.id = ?
Das obige - findByBookIdRegion () hat bei mir nicht funktioniert. Folgendes funktioniert mit der neuesten Version von String Data JPA:
quelle
Wenn Sie BookId als kombinierten Primärschlüssel verwenden, müssen Sie die Benutzeroberfläche folgendermaßen ändern:
zu:
Ändern Sie die Anmerkung @Embedded in Ihrer QueuedBook-Klasse wie folgt in @EmbeddedId:
quelle
Meiner Meinung nach behandelt Spring nicht alle Fälle mit Leichtigkeit. In Ihrem Fall sollte das Folgende den Trick tun
oder
Dies hängt jedoch auch von der Namenskonvention der Felder in Ihrer
@Embeddable
Klasse ab.Beispiel: Das folgende Feld funktioniert möglicherweise nicht in einem der oben genannten Stile
Ich habe es mit beiden Fällen versucht (wie folgt) und es hat nicht funktioniert (es scheint, als würde Spring diese Art von Namenskonventionen nicht verarbeiten (dh zu viele Großbuchstaben, insbesondere am Anfang - 2. Buchstabe (nicht sicher, ob dies der Fall ist) der einzige Fall jedoch)
oder
Als ich die Spalte in umbenannt habe
Meine folgenden Lösungen funktionieren ohne Probleme:
ODER
quelle