【发布时间】:2015-07-08 15:05:08
【问题描述】:
我想避免在代码中将列名作为字符串。有没有其他方法可以做到这一点?:
String query = "SELECT c.foo1.columnA, c.foo1.foo2.columnB FROM Table c";
session.createQuery(query).list();
我可以通过拆分和获取ClassMetadata、属性Type 和其他Hibernate 函数来迭代列作为c.foo1.foo2.columnB 之类的字符串,直到我到达最后一个元素。但是,我想不出一种从 Java bean 获取列字符串的方法,也可以遍历属性。
【问题讨论】:
-
我的建议:保持你的代码不变。这种方式更具可读性。实施单元测试以确保您的查询是有效的,并做他们应该做的事情。使用命名查询,以便在部署时对其进行验证。
-
但它们不是列名。它们是您的实体的类属性名称。而且您也不是从特定表中进行选择,而是在查询实体实例。这读起来像是一个 X/Y 问题——为什么要让属性名称变量?您想对不同的实体重复使用相同的查询吗?
-
实际上,我不得不重组数据库中的一些表和列。因此,我不得不更改我的 Java bean。但是,我还必须在所有代码中搜索使用某些已更改列的查询。因此,我想知道是否有更好的方法来解决这个问题。
-
标准呢?
标签: java hibernate javabeans hibernate-mapping