Frühlings-Daten - ODER-Bedingung, die in einem repository-Methode name
In meinem Spring-Data-Projekts habe ich ein folgenden Unternehmen:
@Entity
@NamedEntityGraph(name = "graph.CardPair", attributeNodes = {})
@Table(name = "card_pairs")
public class CardPair extends BaseEntity implements Serializable {
private static final long serialVersionUID = 7571004010972840728L;
@Id
@SequenceGenerator(name = "card_pairs_id_seq", sequenceName = "card_pairs_id_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.AUTO, generator = "card_pairs_id_seq")
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "card1_id")
private Card card1;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "card2_id")
private Card card2;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "selected_card_id")
private Card selectedCard;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "board_id")
private Board board;
....
}
Brauche ich zur Umsetzung einer Spring-Data-repository-Methode, die sich für eine CardPair
basierend auf cardPairId
, board
und card
. Der kompliziertere Fall ist mir ein Card
weil ich konstruieren müssen, eine Bedingung, wo card1 = card or card2 = card
Ist es möglich, diesen Zustand über Spring Data repository-Methode name ?
Beispielsweise
cardPairRepository.findByIdAndBoardAnd[card1 = card or card2 = card]AndSelectedCardIsNull(cardPairId, board, card);
Ist es möglich, übersetzen diese Bedingung card1 = card or card2 = card
im Namen einer Methode ?
- Sind Sie gerade auf der Suche nach einer Methode, die Namen hier?
- Ja, ich kann nicht konstruieren diese Methode Namen mit der erwähnten Bedingung
- Verwenden Sie die finder-Methoden, die nur für einfache Anwendungsfälle, für complexer Fällen schreiben Sie eine Abfrage, und verwenden Sie die
@Query
annotation. - Ich würde stark vorschlagen, schreiben Sie die Abfrage selbst mit HPQL..
- Danke! Ich habe umgesetzt JPQL-Abfrage, und nun funktioniert alles wunderbar.
@Query(value = "SELECT cp FROM CardPair cp WHERE id = :cardPairId AND board = :board AND card1 = :card OR card2 = :card AND selectedCard is null")
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es unmöglich, diese mit nur Methode, da braucht man die Letzte Bedingung in Klammern:
id = ? AND board = ? AND (card1 = ? OR card2 = ?)
. Es gibt keine Möglichkeit zu folgern dies aus Methodenname, da ist es bestimmt für die Deckung der grundlegenden Fällen nur.Gibt es drei Möglichkeiten, in Ihrem Fall:
Finden Sie alle Operationen hier: http://docs.spring.io/spring-data/jpa/docs/1.3.0.RELEASE/reference/html/jpa.repositories.html Abschnitt 2.2.2
Habe ich noch nicht testen, die Bestellung, aber es sollte so etwas wie dieses
@Query
schlagen von Alec ist wohl sicherer.