我编写了很多 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, 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.
当我在几乎所有查询中使用元模型类时,经常会抛出此警告。
有什么有用的方法可以避免这些警告吗?众所周知,元模型类只是生成的,它们的属性从未被写入。
我不想从 FindBugs sca 中排除 DAO 类,因为我想检查这些类以找到其他可能的错误!
最佳答案
这里有一些想法:
- 修改生成器以添加(冗余)setter1。
- 实现 FindBugs 过滤器(请参阅 http://findbugs.sourceforge.net/manual/filter.html )以排除特定类或包中的特定错误。或者一般情况下。
1 - setter 可能会被声明为 private
。 FindBugs 很可能不会检查 setter 是否被调用。
关于java - FindBugs:使用 JPA 元模型时如何避免 "Unwritten public field"警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46178630/