假设我们有一个具有以下id的实体类:
@Entity
class SomeEntity {
@Id
private String key;
...
}
使用 CrudRepository 的findById(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(...))
vsfindByFirstKeyAndSecondKey(int firstKey, String secondKey)
?
1条答案
按热度按时间toe950271#
是的,两者之间存在差异。
findById
是通过在EntityManager
上使用专用方法实现的,该方法将首先检查一级缓存,因此可能会避免任何数据库访问。只要您没有配置查询缓存,派生查询方法就会创建查询并执行它。
如果有问题的实体不在一级缓存中,则执行的代码路径仍然有很大的不同,但在生产中您不太可能注意到这一点。