字符串解耦和字段名称

时间:2011-10-27 14:10:57

标签: java hibernate reflection hibernate-criteria

我有许多域/业务对象,当在hibernate标准中使用时,字段名称将其引用为字符串,例如:

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

名字 User.class 的字段/属性。

我可以手动创建一个Enum并将所有字符串存储在那里;有没有其他方法,我缺少,需要较少的工作(我可能会忘记保持Enum)。

2 个答案:

答案 0 :(得分:3)

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

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

希望它有所帮助。

答案 1 :(得分:1)

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

在任何情况下,我在过去使用两种机制中的一种解决了这个问题,要么自定义用于从Hibernate配置文件生成基类的模板,要么查询我的Hibernate类以获取注释/属性并生成适当的枚举,类,常数等等。这很简单。

它为构建过程增加了一个步骤,但IMO正是我在做这件事时所需要的。 (最后几个项目我还没有完成,但对于我非常喜欢的大型多开发项目。)