【问题标题】:FindBugs: How to avoid "Unwritten public field" warning when using JPA meta model?FindBugs:使用 JPA 元模型时如何避免“未写入的公共字段”警告?
【发布时间】:2017-09-12 14:08:11
【问题描述】:

我已经编写了很多 DAO 类,并在其中使用了 JPA criteria API 及其元模型,例如以下示例:

@Override
public EntityA findByEntityB(EntityB entityB) {
  CriteriaBuilder builder = this.getCriteriaBuilder();
  CriteriaQuery<EntityA> criteriaQuery = builder.createQuery(EntityA.class);
  Root<EntityA> root = criteriaQuery.from(EntityA.class);
  criteriaQuery.select(root);
  criteriaQuery.where(builder.and(builder.equal(root.get(EntityA_.entityB), entityB)));
  return this.findByCriteriaQuery(criteriaQuery);
}

在运行静态代码分析时,FindBugs 会引发以下警告:

UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD,优先级:正常

未写入的公共或受保护字段:EntityA_.entityB

没有看到对此公共/受保护字段的写入。对它的所有读取都将返回默认值。检查错误(应该已经初始化了吗?),如果没用就删除。

由于我在几乎所有查询中都使用元模型类,因此经常抛出此警告。

有什么有用的方法可以避免这些警告吗?众所周知,元模型类是刚刚生成的,它们的属性从未被写入。

我不想从 FindBugs sca 中排除 DAO 类,因为我想检查这些以找出其他可能的错误!

【问题讨论】:

  • 您可以为该字段添加setter
  • @StephenC 元模型类是在每个构建中生成的,它们的属性是static
  • 您可以为static 实现一个getter。这不需要是“好风格”:-)

标签: java jpa criteria-api findbugs


【解决方案1】:

这里有一些想法:


1 - setter 可能被声明为private。 FindBugs 很有可能不会检查 setter 是否被调用。

【讨论】:

  • 看来,没有编程方法可以避免这些错误,但只能忽略它们我在我的 findbugs 配置中添加了一个过滤器。
【解决方案2】:

How to suppress FindBugs warnings for fields or local variables 可能重复。

您可以提取一个方法并将方法级别@SuppressFBWarnings 应用于该方法。

【讨论】:

  • 我想避免这个警告,而不是压制/忽略它们。
  • 我面临同样的问题。我不认为它是重复的,它与 JPA 元模型相关联。我正在寻找一种程序化方式来正确清除这些警告。
【解决方案3】:

您可以添加这些字段的Setter,然后它可以删除FindBugs错误消息

【讨论】:

    猜你喜欢
    • 2022-11-06
    • 1970-01-01
    • 2020-09-05
    • 2023-03-31
    • 1970-01-01
    • 2019-10-04
    • 2016-10-24
    • 2019-02-21
    • 1970-01-01
    相关资源
    最近更新 更多