java - 使用 QueryDSL 按唯一字段查找实体

标签 java jakarta-ee jpa querydsl

假设我正在处理 MyEntity 表,其中 name 字段必须是唯一的(但不是主键)。

我想使用 QueryDSL 定义 findByName 方法。

我当前的实现如下:

public MyEntity findByName(final String name) {
    JPAQuery query = new JPAQuery(this.entityManager);
    QMyEntity myEntity;
    List<MyEntity> result = jpaQuery.from(myEntity).where(myEntity.name.eq(name)).list(myEntity);
    if (result.isEmpty())
        throw new EntityNotFoundException();
    else if (result.size() == 1)
        return result.get(0);
    else
        throw new PersistenceException();
}

我的解决方案是完成此任务的正确解决方案还是有更好的方法?

最佳答案

使用uniqueResult而是列表:

public MyEntity findByName(final String name) {
    JPAQuery query = new JPAQuery(this.entityManager);
    QMyEntity myEntity;
    MyEntity result = jpaQuery.from(myEntity).where(myEntity.name.eq(name)).uniqueResult(myEntity);
    if (result ==  null)
        throw new EntityNotFoundException();
    else
        return result;
}

关于java - 使用 QueryDSL 按唯一字段查找实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26176008/

相关文章:

java - hibernate 中的@JoinFormula

java - 在单个查询中使用 FK 更新现有 JPA 子实体

java - 在 iText Java 中添加 map

java - WebSphere 服务器未接受 EAR 中的新更改

java - 使用 Spring Security ACL

java - 如何使用 JSONB PostgreSQL 通过 JSON 插入列?

java - 在java上用定时器做一个测验

Java有序双向链表可与

java - 当我在java中执行更新查询时遇到一些问题

java - 如何避免在 Java 中创建对象?