【问题标题】:How to eliminate "unchecked" warnings when using JPA使用 JPA 时如何消除“未经检查”的警告
【发布时间】:2023-03-21 00:21:02
【问题描述】:

我使用 javax.persistence 进行了大量查询。 Java 迫使我要么遭受警告,要么@Suppress 他们,这两种感觉都不对。

@SuppressWarnings("unchecked")
@Override
public List<Area> getArea(Province province) {
    Query qry = em.createQuery("Select c from Area c where c.province = ?1");
    qry.setParameter(1, province);
    return qry.getResultList();
}

如何消除上述代码中的警告?

【问题讨论】:

    标签: java jpa persistence


    【解决方案1】:

    如果您使用 JPA 注释,请使用 TypedQuery 而不是 Query:

    TypedQuery<Area> qry = em.createQuery(
        "Select c from Area c where c.province = ?1", Area.class);
    

    【讨论】:

    • 我还建议 OP 使用命名参数
    • 如果我这样做,我会得到一个Type mismatch: cannot convert from Query to TypedQuery&lt;Area&gt;。 em.createQuery 结果只会生成一个普通的查询。
    • 检查 createQuery(String, class) 方法中的第二个参数。您正在传递类型。
    • 好的,知道了,你需要在createQuery中添加Area.class。
    【解决方案2】:

    您可以使用 Criteria API 来避免这种情况。查看this question 了解如何使用它。

    【讨论】:

    • +1,但是在这种情况下,不需要使用 Criteria API,而是可以将 OP 的代码移植到使用泛型的 TypedQuery 中,并且需要较少的返工。
    • Criteria API 强制您编写查询的复杂方式让我头疼。这是一种自虐的练习。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多