java—如何使用SimpleJPrepository中的方法检查数据库中是否存在实体

qojgxg4l  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(728)

我试图使用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”列,而不进行任何连接,也不读取不必要的对象?

ffdz8vbo

ffdz8vbo1#

我会这样做一个jpql查询:

select case when (count(*) > 0)  then true else false end from MyEntity m where m.taskEntity.id = :id and upper(m.name) = upper(:name)

它会给你一个很好的布尔值。

相关问题