java - 字符串解耦和字段名称

标签 java hibernate reflection hibernate-criteria

我有许多域/业务对象,当在 hibernate 条件中使用时,它们被字段名称引用为字符串,例如:

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

firstnameUser.class 的字段/属性。

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

最佳答案

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

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

希望对您有所帮助。

关于java - 字符串解耦和字段名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7917162/

相关文章:

java - Spring data jpa, native 查询,返回错误的字段类型

java - 将多个@Id 用于复合主键时出现 Eclipse 错误

Java.lang.reflect.Proxy 从调用返回另一个代理导致赋值时出现 ClassCastException

java - 通过反射/javassist调用不存在的函数

java - 仅允许在 itext Pdf 中打印

java - 不同的嵌套列表,按值属性比较列表项,Java8 Lambda

java - Hibernate:无法通过 com.mahlzeit.datamodel.address.City.id 的反射 setter 设置字段值

java - 如何解析(然后查找特定的)从 API 请求接收到的 XML 数据?

java - 如何从 JSP 中的@ResponseBody 获取列表?

android - 使用 android :exported=false 从 APK 加载服务