web-dev-qa-db-ja.com

Spring Data-ORリポジトリメソッド名の条件

私のSpring Dataプロジェクトには、次のエンティティがあります。

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

....

}

CardPaircardPairIdおよびboardに基づいてcardを検索するSpring Dataリポジトリメソッドを実装する必要があります。私にとってより複雑なケースはCardです。なぜなら、card1 = card or card2 = card

Spring Dataリポジトリのメソッド名を介してこの条件を提供することは可能ですか?

例えば

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

この状態を翻訳することは可能ですかcard1 = card or card2 = cardメソッド名に?

17
alexanoid

最後の条件を括弧で囲む必要があるため、メソッド名だけを使用してこれを実現することはできません:id = ? AND board = ? AND (card1 = ? OR card2 = ?)。これは基本的なケースのみを対象としているため、メソッド名からこれを推測する方法はありません。

あなたの場合には3つの方法があります:

11
Alec Kravets

すべての操作はここにあります: http://docs.spring.io/spring-data/jpa/docs/1.3.0.RELEASE/reference/html/jpa.repositories.html セクション2.2。 2

findByIdAndBoardAndCard1OrCard2(cardPairId, board, card, card);

私はこれの順序をテストしていませんが、このようなものでなければなりません

1