如何避免HQL、Hibernate中硬编码的字段名?
假设我有以下HQL:如何避免HQL、Hibernate中硬编码的字段名?,hibernate,refactoring,hql,hard-coding,Hibernate,Refactoring,Hql,Hard Coding,假设我有以下HQL: String hql = "select e.aField from MyEntity as e"; 如果我想重构并将MyEntity的成员变量aField的名称更改为其他名称,我还必须更改整个代码中出现的所有字符串。如果我忘记更改一个hql字符串,代码就会中断 如何避免这种情况发生?你不能,因为它们只是字符串(定义上很难重构)使用一个足够聪明的IDE,知道如何为你做,比如IntelliJ。如果我重命名一个类或变量,IntelliJ会为我找到所有的用法并管理更改。您可以使
String hql = "select e.aField from MyEntity as e";
如果我想重构并将MyEntity
的成员变量aField
的名称更改为其他名称,我还必须更改整个代码中出现的所有字符串。如果我忘记更改一个hql字符串,代码就会中断
如何避免这种情况发生?你不能,因为它们只是字符串(定义上很难重构)使用一个足够聪明的IDE,知道如何为你做,比如IntelliJ。如果我重命名一个类或变量,IntelliJ会为我找到所有的用法并管理更改。您可以使用-您将HQL作为任何实体上的注释值,并在启动时将它们编译为SQL。如果hql中有任何错误,您将无法启动Web应用程序。选项: 1.使用标准而不是HQL 2.使用NHibernateToLinq
3.为每个类创建一个所有属性的枚举,并在HQL中使用它(需要连接)我相信您正在寻找与我一样的东西。。。找到了 我使用自定义Hibernate模板生成Java代码。我只是拿了一份他们的,然后开始胡闹。这听起来比实际情况更可怕——相信我 我在PojoFields.ftl文件中添加了以下代码: 只要我总是使用这些静态变量,并且从不硬编码它们的值,我就可以避免与数据库结构更改相关的运行时错误 示例:
Criteria criteria = session.createCriteria(ClPost.class).add(
Restrictions.ne(ClPost.postalCode_propname, "90210"));
String hql = "select e." + ClPost.postalCode_propname
+ " from " + ClPost.class.getSimpleName() + " as e";
使用条件时,还需要将字段名作为字符串。eq(“fieldname”,foo)-这与重构有同样的问题。
public static final String postalCode_propname = "postalCode";
public static final int postalCode_len = 15;
Criteria criteria = session.createCriteria(ClPost.class).add(
Restrictions.ne(ClPost.postalCode_propname, "90210"));
String hql = "select e." + ClPost.postalCode_propname
+ " from " + ClPost.class.getSimpleName() + " as e";