Spring 数据如何决定 FindBy 返回的内容

How does Spring Data decide what is returned by FindBy

如果有多个匹配,Spring数据的findBy如何决定return哪条数据库记录?

我意识到,如果我的 Elastic Search 数据库中有多个条目具有相同的属性代码(即:“123”),Spring 只有 return 一个条目,当我调用'findByAttributeCode'.

如果我使用 findById,它不言自明,因为 Id 是唯一的,但是对于其他 findBys,可以有很多匹配项。 注意:attributeCode 不是唯一的。

Spring如何决定要return哪一个?

我的电话是这样的: Attribute attribute = findByAttribute(attributeCode);

回购看起来像这样:

public interface AttributeRepository extends ElasticsearchRepository<Attribute, String> {
    
    Attribute findByAttributeCode(String attributeCode);
}

这取自您为函数定义的 return 类型。如果您指定一个集合,所有匹配的文档都会为您的查询 return 编辑。

如果您将单个对象定义为 return 类型,则从底层存储(此处为 Elasticsearch)returned 的第一个条目是 returned。第一个条目是什么,取决于您的查询条件、排序参数 - 无论 Elasticsearch return 第一个是什么,都会 returned 给调用者。

如果有不止一种可能性,您应该做的是像这样创建方法存根:

<Iterable>Attribute findByAttributeCode(String attributeCode);

这样你 return 全部。如果您不这样做,那么您将受制于 RDBMS 如何构建它交换到 return 来自多个元组的单个条目,它将 return 来自它构建的查询,这应该是什么喜欢:

select * from table where attributeCode = ?;