Hibernate - 在制作谓词时避免 属性 名称中的字符串

Hibernate - avoid string in property name when making predicate

我有以下实体:

@Entity
MyClass{

    @Column(length = 6, nullable = true)
    @Type(type = "mypackage.MyInnerClassHibernateType")
    @Mergable
    private MyInnerClass myProperty;

    ...

}

当我需要在 myProperty 上做谓词时,我会这样做:

criteriaBuilder.equal(queryRoot.get("myProperty"), value);

这很好用,但我不喜欢在查询中使用“myProperty”字符串。如果我重命名 属性 我必须遍历所有这些字符串并在那里重命名。我发现这种设计容易出错。

是否有任何选项可以避免使用硬编码字符串?

我用完了 Lombok 的 @FieldNameConstants

如果您这样注释 class:

@FieldNameConstants
public class FieldNameConstantsExample {
  private final String iAmAField;
  private final int andSoAmI;
  @FieldNameConstants.Exclude private final int asAmI;
}

然后您可以通过以下方式访问字段名称:

FieldNameConstantsExample.Fields.iAmAField;

其中 returns 你的字符串包含一个 属性 的名称。