spring-data-jpa Spring Data 存储库findById与派生的findBy[id-列名]

7vux5j2d  于 2022-11-10  发布在  Spring
关注(0)|答案(1)|浏览(168)

假设我们有一个具有以下id的实体类:

@Entity
class SomeEntity {
    @Id
    private String key;
    ...
}

使用 CrudRepositoryfindById(key)和使用我们自己的方法findByKey(String key)有什么区别吗?
当主键是复合的时,两者之间有什么区别吗,例如:

class CompositeKey implements Serializable {
    private Integer firstKey;
    private String secondKey;
    ...
}

@Entity
@IdClass(CompositeKey.class)
class SomeEntity {
    @Id
    private Integer firstKey;
    @Id
    private String secondKey;
    ...
}

然后是findById(new CompositeKey(...)) vs
findByFirstKeyAndSecondKey(int firstKey, String secondKey)

toe95027

toe950271#

是的,两者之间存在差异。findById是通过在EntityManager上使用专用方法实现的,该方法将首先检查一级缓存,因此可能会避免任何数据库访问。
只要您没有配置查询缓存,派生查询方法就会创建查询并执行它。
如果有问题的实体不在一级缓存中,则执行的代码路径仍然有很大的不同,但在生产中您不太可能注意到这一点。

相关问题