当前位置: 首页 > 知识库问答 >
问题:

Spring Data-存储库方法名称中的OR条件

充小云
2023-03-14

在我的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数据存储库方法,该方法将基于< code>cardPairId 、< code>board和< code>card来查找< code>CardPair。对我来说,更复杂的情况是< code>Card,因为我需要构造一个条件,其中< code>card1 = card或card2 = card

是否可以通过Spring数据存储库方法名称提供此条件?

举个例子

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

是否可以在方法名称中翻译该条件< code>card1 = card或card2 = card?

共有2个答案

宗政燕七
2023-03-14

您可以在这里找到所有操作: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);

我还没有测试这个顺序,但应该是这样的

邓建柏
2023-03-14

仅仅使用方法名是不可能做到这一点的,因为您需要将最后一个条件放在括号中:< code>id =?而board =?和(card1 =?还是card2 =?)。没有办法从方法名中推断出这一点,因为它只打算覆盖基本的情况。

在您的情况下有三种方法:

  • @查询注释(最适合您)http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-方法。在查询时
  • 命名查询http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-方法。命名查询
  • 规格http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#specifications
 类似资料:
  • 我对SpringData和JPA有问题。当我向HomeRepository接口添加方法时,我得到一个错误。我使用的是JPararePository接口,在pom.xml文件中有一个MySQL数据库集。这些只是我对spring的开始,所以我需要一些了解spring的人的帮助。下面是我的代码和日志: 主页库: 用户存储库: 日志:

  • 我创建了一个通过spring数据自动创建查询的方法。问题出在返回参数上,因为与名称定义不匹配。实际上,通过只指定一个参数,它返回4个参数。 springData方法是:

  • 问题内容: 是否可以使用Spring Data创建只读存储库? 我有一些链接到视图的实体,还有一些子实体,我想为其提供一个存储库,其中包含的某些方法,以及带有批注的某些方法。我想避免提供像和这样的方法,因为它们没有意义,并且可能会产生错误。 谢谢! 问题答案: 是的,方法是添加手工制作的基础存储库。您通常使用以下内容: 现在,您可以使刚刚定义的具体回购扩展: 定义基本存储库的关键部分是,方法声明

  • 问题内容: 为了将提交分支的名称隔离到可以在日志中打印出的变量中,需要对以下内容进行哪些具体更改? 在以下情况下,分支的名称为。 具体细节如下: Jenkinsfile: 以下代码在通过运行命令产生的输出中间打印出分支名称,但是当后续代码行()尝试打印命令的封装结果时,此信息会丢失: 结果日志: 结果日志输出为: 重述的问题: 为了在日志中输出以下行,需要如何修改上述Jenkinsfile: 问题

  • 问题内容: 是否可以让您的用户下载其他名称的文件? 例如,有一个名为“ 4324ffsd34.jpg”的文件。我希望人们通过download.php以不同的名称(例如“ filetodownload.jpg”)下载它,而不重命名原始文件。 问题答案: 当然,请使用Content-disposition 标头 如果您希望提供默认文件名,而不是自动下载,那么这似乎可行。

  • 使用spring data for mongodb,如何指定存储库方法的返回类型以包含文档中的特定属性?前任: 存储库: 上面的findAllNames按预期工作,只从文档中获取name属性。然而,spring数据返回的对象是Foo对象的字符串表示,该对象具有id和name属性,值和其余属性为null。我需要获取列表,而不是Foo对象