wake-up-neo.com

Frühlingsdaten - OR Bedingung in einem Repository-Methodennamen

In meinem Spring Data-Projekt habe ich folgende Entität:

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

....

}

Ich muss eine Spring Data-Repository-Methode implementieren, die nach CardPair basierend auf cardPairId, board und card sucht. Der kompliziertere Fall ist für mich eine Card, da ich eine Bedingung erstellen muss, in der card1 = card or card2 = card

Ist es möglich, diese Bedingung über den Methodennamen der Spring Data Repository bereitzustellen?

Zum Beispiel

cardPairRepository.findByIdAndBoardAnd[card1 = card or card2 = card]AndSelectedCardIsNull(cardPairId, board, card);

Ist es möglich, diese Bedingung card1 = card or card2 = card in einen Methodennamen zu übersetzen?

11
alexanoid

Dies kann nur durch den Methodennamen erreicht werden, da die letzte Bedingung in Klammern stehen muss: id = ? AND board = ? AND (card1 = ? OR card2 = ?). Dies lässt sich nicht aus dem Methodennamen ableiten, da er nur grundlegende Fälle abdecken soll.

In Ihrem Fall gibt es drei Möglichkeiten:

7
Alec Kravets

Alle Vorgänge finden Sie hier: http://docs.spring.io/spring-data/jpa/docs/1.3.0.RELEASE/reference/html/jpa.repositories.html Abschnitt 2.2.2

findByIdAndBoardAndCard1OrCard2(cardPairId, board, card, card);

Ich habe die Reihenfolge nicht ausprobiert, aber es sollte so etwas sein

0