我有许多域/业务对象,当在hibernate标准中使用时,字段名称将其引用为字符串,例如:
Criteria crit = session.createCriteria(User.class);
Order myOrdering = Order.desc("firstname");
crit.addOrder(myOrdering);
名字是 User.class 的字段/属性。
我可以手动创建一个Enum并将所有字符串存储在那里;有没有其他方法,我缺少,需要较少的工作(我可能会忘记保持Enum)。
答案 0 :(得分:3)
我担心没有好方法可以做到这一点。 即使您决定使用反射,只有在查询运行时才会发现问题。
但是有一个更好的解决方案如何尽早发现问题:如果你使用命名查询(javax.persistence.NamedQueries),只要你的实体被Hibernate处理,你就可以编译所有的查询,所以基本上它会在服务器启动期间发生。因此,如果某个对象被更改破坏了查询,您将在下次启动服务器时知道它,而不是在实际运行查询时。
希望它有所帮助。
答案 1 :(得分:1)
这是让我对Hibernate感到恼火的事情之一。
在任何情况下,我在过去使用两种机制中的一种解决了这个问题,要么自定义用于从Hibernate配置文件生成基类的模板,要么查询我的Hibernate类以获取注释/属性并生成适当的枚举,类,常数等等。这很简单。
它为构建过程增加了一个步骤,但IMO正是我在做这件事时所需要的。 (最后几个项目我还没有完成,但对于我非常喜欢的大型多开发项目。)