FindBugs:使用 JPA 元模型时如何避免 "Unwritten public field" 警告?

FindBugs: How to avoid "Unwritten public field" warning when using JPA meta model?

我写了很多 DAO class 并在其中使用了 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, Priorität: Normal

Unwritten public or protected field: EntityA_.entityB

No writes were seen to this public/protected field. All reads of it will return the default value. Check for errors (should it have been initialized?), or remove it if it is useless.

因为我在几乎所有查询中都使用了元模型 classes,所以经常会出现此警告。

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

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

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

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

这里有一些想法:


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

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