Dans mon projet Spring Data, j'ai une entité suivante:
@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;
....
}
J'ai besoin d'implémenter une méthode de référentiel Spring Data qui recherchera une CardPair
basée sur cardPairId
, board
et card
. Le cas le plus compliqué pour moi est une Card
car je dois construire une condition dans laquelle card1 = card or card2 = card
Est-il possible de fournir cette condition via le nom de la méthode du référentiel Spring Data?
Par exemple
cardPairRepository.findByIdAndBoardAnd[card1 = card or card2 = card]AndSelectedCardIsNull(cardPairId, board, card);
Est-il possible de traduire cette condition card1 = card or card2 = card
dans un nom de méthode?
Il est impossible d'y parvenir en utilisant uniquement le nom de la méthode, car la dernière condition doit être entre parenthèses: id = ? AND board = ? AND (card1 = ? OR card2 = ?)
. Il n'y a aucun moyen de déduire cela du nom de la méthode car il est destiné à couvrir uniquement les cas de base.
Il y a trois façons dans votre cas:
Vous trouverez toutes les opérations ici: http://docs.spring.io/spring-data/jpa/docs/1.3.0.RELEASE/reference/html/jpa.repositories.html section 2.2.2
findByIdAndBoardAndCard1OrCard2(cardPairId, board, card, card);
Je n'ai pas testé l'ordre de ceci, mais ça devrait être quelque chose comme ça