在我们的项目中,我们广泛使用Hibernate HQL和Orika。 这会使重构成为一种痛苦,因为在编辑字段名称或删除字段时,映射中字符串中引用的所有字段都会中断。
这个问题的两个可能(部分)解决方案是更好的单元测试覆盖率和更好的IDE配置,但我宁愿在它的核心解决问题并使用直接字段引用而不是字符串。 / p>
是否有任何框架(类似于Lombok)可以更容易地在映射中使用字段引用,以便重构导致编译时错误而不是运行时错误?
更新:我发现了可以创建JPA 2元模型的Hibernate Metamodel Generator:http://hibernate.org/orm/tooling/ 对于非数据库相关的引用,也许存在这样的事情?
答案 0 :(得分:0)
如果我理解正确你有很多hibernate HQL查询,看起来像这样:// Remember, facts.length returns how many elements in the array
// and new Random.nextInt() will generate a new result on every call
// These are your facts:
String facts[] = {
"Elephants are the only mammals that can't jump.",
"Candles will burn longer and drip less if they are placed in the freezer a few hours before using.",
"Potatoes have more chromosomes than humans.",
"You burn more calories sleeping than you do watching television.",
"Animals that lay eggs don't have belly buttons.",
};
// Here you get a random fact
public String getRandomFactWithNumber() {
// Generate a random number between 0 and facts.length
int factNumber = new Random.nextInt(facts.length);
// Return the fact with its number
return "Fact " + factNumber + ": " + facts[factNumber];
}
// And if you only want a fact, without the number
public String getRandomFact() {
// Generate a random number between 0 and facts.length
int factNumber = new Random.nextInt(facts.length);
// Return the fact
return facts[factNumber];
}
你的问题是,如果你将名称“fufu_filed”更改为“yoyo_filed”,你必须搜索所有你的查询字符串并手动更改值。这是一个问题。我不熟悉任何可以解决此问题的框架,但我建议您在"select fufu_field from myEntityImpl"
变量中定义所有字段名称。那么在上面的示例中,您将需要重新编写查询,如下所示:
Static final String
现在,如果您需要更改名称,则只需在一个位置更改静态字符串FUFU_FIELD_NAME变量的值,无论其使用的时间如何。您可以更进一步,在属性文件中定义您的名称,一旦您的服务器启动,它可以读取属性文件中的值并初始化您的静态变量。这样您甚至不需要重新编译项目 - 只需更改属性文件并重新启动服务器即可。