3

我有许多域/业务对象,当在休眠条件中使用时,字段名称将其作为字符串引用,例如:

Criteria crit = session.createCriteria(User.class);
Order myOrdering = Order.desc("firstname");
crit.addOrder(myOrdering);

其中firstnameUser.class的字段/属性。

我可以手动创建一个 Enum 并将所有字符串存储在其中;有没有其他我想念的方法并且需要更少的工作(我可能会忘记维护枚举)。

4

2 回答 2

3

恐怕没有好的方法可以做到这一点。即使您决定使用反射,也只有在查询运行时才会发现问题。

但是有一个更好的解决方案如何及早发现问题:如果您使用命名查询(javax.persistence.NamedQueries),只要您的实体由 Hibernate 处理,您就会编译所有查询,所以基本上它会在服务器启动期间发生。因此,如果某个对象被更改破坏了查询,您将在下次启动服务器时知道它,而不是在查询实际运行时。

希望能帮助到你。

于 2011-10-27T14:30:24.800 回答
1

这是让我对 Hibernate 感到恼火的事情之一。

无论如何,我过去使用两种机制之一解决了这个问题,或者自定义用于从 Hibernate 配置文件生成基类的模板,或者询问我的 Hibernate 类以获取注释/属性并生成适当的枚举、类、常量,等等。这很简单。

它在构建过程中增加了一个步骤,但 IMO 这正是我做它时所需要的。(最后几个项目我没有做过,但是对于大型的、多开发的东西我真的很喜欢。)

于 2011-10-27T14:39:43.537 回答