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 你的字符串包含一个 属性 的名称。
我有以下实体:
@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 你的字符串包含一个 属性 的名称。