我试图使用simplejparepository中可用的方法来找出是否存在与一些条件匹配的实体。
我的实体如下所示:
@Entity
public class MyEntity{
@Id
private int id;
@ManyToOne
private TaskEntity taskEntity;
@Column
private String name;
...
我的方法是这样的:
/**Check if any entity exists with the given taskId and name */
public boolean existsByTaskAndName(int taskId, String name){
MyEntity probe = new MyEntity();
probe.setTask(entityManager.getReference(TaskEntity.class, taskId));
probe.setName(name);
return exists(Example.of(probe, ExampleMatcher.matching().withIgnoreCase()));
}
我希望sql查询如下所示:
select top 1 * from my_entity where task=@taskId and lower(name)=lower(@name)
但实际上,sql查询包含与taskentity和与taskentity相关的所有实体的内部联接,而where子句包含taskentity的所有字段和所有其他相关实体的所有字段之间的比较(总共10+个内部连接和100+个where子句)。
如何编写方法,使其只比较“task”和“name”列,而不进行任何连接,也不读取不必要的对象?
1条答案
按热度按时间ffdz8vbo1#
我会这样做一个jpql查询:
它会给你一个很好的布尔值。