Spring 数据 - 存储库方法名称中的 OR 条件
Spring Data - OR condition in a repository method name
在我的 Spring 数据项目中,我有以下实体:
@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;
....
}
我需要实施 Spring 数据存储库方法,该方法将根据 cardPairId
、board
和 card
查找 CardPair
。对我来说更复杂的情况是 Card
因为我需要构造一个条件 card1 = card or card2 = card
是否可以通过 Spring 数据存储库方法名称提供此条件?
例如
cardPairRepository.findByIdAndBoardAnd[card1 = card or card2 = card]AndSelectedCardIsNull(cardPairId, board, card);
是否可以在方法名称中翻译此条件 card1 = card or card2 = card
?
您可以在此处找到所有操作: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);
这个顺序我没测试过,不过应该是这样的
仅使用方法名称是不可能实现的,因为您需要将最后一个条件放在括号中:id = ? AND board = ? AND (card1 = ? OR card2 = ?)
。无法从方法名称中推断出这一点,因为它旨在仅涵盖基本情况。
你的情况有以下三种方式:
在我的 Spring 数据项目中,我有以下实体:
@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;
....
}
我需要实施 Spring 数据存储库方法,该方法将根据 cardPairId
、board
和 card
查找 CardPair
。对我来说更复杂的情况是 Card
因为我需要构造一个条件 card1 = card or card2 = card
是否可以通过 Spring 数据存储库方法名称提供此条件?
例如
cardPairRepository.findByIdAndBoardAnd[card1 = card or card2 = card]AndSelectedCardIsNull(cardPairId, board, card);
是否可以在方法名称中翻译此条件 card1 = card or card2 = card
?
您可以在此处找到所有操作: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);
这个顺序我没测试过,不过应该是这样的
仅使用方法名称是不可能实现的,因为您需要将最后一个条件放在括号中:id = ? AND board = ? AND (card1 = ? OR card2 = ?)
。无法从方法名称中推断出这一点,因为它旨在仅涵盖基本情况。
你的情况有以下三种方式: