【发布时间】:2021-09-08 19:19:50
【问题描述】:
我有以下实体:
@Entity
MyClass{
@Column(length = 6, nullable = true)
@Type(type = "mypackage.MyInnerClassHibernateType")
@Mergable
private MyInnerClass myProperty;
...
}
当我需要对myProperty 进行谓词时,我会这样:
criteriaBuilder.equal(queryRoot.get("myProperty"), value);
这很好用,但我不喜欢在查询中使用“myProperty”字符串。如果我重命名属性,我必须遍历所有这些字符串并在那里重命名。我发现这种设计容易出错。
有什么方法可以避免使用硬编码字符串吗?
【问题讨论】:
-
您需要的是类型安全的元模型。这里描述developer.ibm.com/languages/java/articles/j-typesafejpa
-
是的,像这样。但是如何将它合并到我的解决方案中?我曾尝试输入
queryRoot.get(MyClass_.myProperty),但这显然无法编译。我在这里错过了什么? -
您需要在依赖项中包含注释处理器:docs.jboss.org/hibernate/jpamodelgen/1.0/reference/en-US/…。在构建过程中,处理器将自动为您标记有
@Entity注释的类创建元模型。在您的情况下,它将为MyClass类生成MyClass_ -
非常感谢,我要试一试。
标签: java hibernate hibernate-criteria