在下面的标准条件中:
Criteria cr = session.createCriteria(Employee.class);
// To get records having salary more than 2000
cr.add(Restrictions.gt("salary", 2000));
首先,“salary”是我的Employee实体的属性还是数据库表的一列?
其次,如果我想更改/删除此“薪水”,我是否必须搜索所有查询以更新它们?
答案 0 :(得分:1)
我认为您正在寻找的是hibernate的metamodel生成器。这是一个构建时工具,可以从每个实体生成一个新类,并使用适当的注释来允许您使用生成的类'标准查询中的字段而不是字符串。
对于您的示例,您可以编写
cr.add(Restrictions.gt(Employee_.salary, 2000));
重构时唯一的问题是IDE重构工具在重构实体时重构使用生成的元模型类似乎并不聪明。解决方法是重构实体并在生成的类上执行相同的重构。虽然生成的类中的重构不是直接必需的(它将通过更改重新生成),但它具有重构必须更改的元模型类的所有用法的效果。
如果您要从salary
实体中删除Employee
,它将自动从生成的Employee_
元模型类中删除。这会为所有提及salary
的查询提供编译错误。这比替代方法要好得多,其中一切都在继续编译,但在执行查询时失败。
答案 1 :(得分:0)
首先,“salary”是我的Employee实体的属性还是数据库表的一列?
是的,salary是Employee实体的属性,而不是数据库表列名。
其次,如果我想更改/删除此“薪水”,我是否必须搜索所有查询以更新它们?
如果您从员工中删除工资字段,则还必须从查询中删除。