我有许多域/业务对象,当在 hibernate 条件中使用时,它们被字段名称引用为字符串,例如:
Criteria crit = session.createCriteria(User.class);
Order myOrdering = Order.desc("firstname");
crit.addOrder(myOrdering);
firstname 是 User.class 的字段/属性。
我可以手动创建一个枚举并将所有字符串存储在其中;有没有其他方法我想念并且需要更少的工作(我可能会忘记维护枚举)。
最佳答案
恐怕没有好的方法可以做到这一点。 即使您决定使用反射,您也只有在查询运行时才会发现问题。
但是有一个更好的解决方案来尽早发现问题:如果您使用命名查询 (javax.persistence.NamedQueries),您将在 Hibernate 处理您的实体后立即编译所有查询,因此基本上它会在服务器启动期间发生。因此,如果某个对象的更改破坏了查询,您将在下次启动服务器时知道它,而不是在实际运行查询时知道。
希望对您有所帮助。
关于java - 字符串解耦和字段名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7917162/