【问题标题】:JPA 1.0 @OrderBy uses field names vs. JPA 2.0 @OrderColumn uses column namesJPA 1.0 @OrderBy 使用字段名,而 JPA 2.0 @OrderColumn 使用列名
【发布时间】:2012-04-24 10:14:48
【问题描述】:

根据 Java EE 6 文档,JPA 1.0 @OrderBy 使用字段名称,而 JPA 2.0 @OrderColumn 在声明注释时使用列名称。见这里:

http://docs.oracle.com/javaee/6/api/javax/persistence/OrderBy.html

http://docs.oracle.com/javaee/6/api/javax/persistence/OrderColumn.html

前者从 JPA 1.0 开始可用,后者是在 JPA 2.0 中添加的。如果您稍微阅读一下文档,就会发现@OrderBy 使用字段/属性来指定顺序,而@OrderColumn 使用 SQL/DDL 列名。

为什么会这样?对我来说,这看起来很矛盾。

有没有更深层次的原因?它是 JPA 1.0 的遗物吗?

【问题讨论】:

    标签: jpa sql-order-by jpa-2.0


    【解决方案1】:

    尝试了解有序列表(JPA1、JPA2)和索引列表(JPA2)之间的区别。一个按条件对元素进行排序,另一个保留它们插入的位置。它们满足不同的用例。 OrderColumn 允许为模式生成目的指定列名。 OrderBy 提供了一种用于检索目的的查询机制。因此,注解和 XML 允许输入的内容是不同的。

    【讨论】:

    • 嗯,这就是我的理解:有序列表可以按任何字段排序,而不仅仅是整数。但是为什么@OrderBy 需要字段而不使用列名呢?我可以看到这对@OrderColumn 没有意义。两者都需要通过 SQL 访问数据库,那么为什么要使用字段名去 @OrderBy 的中间路径呢?嗯……我真的不明白。
    • OrderColumn 添加索引列。 OrderBy 不存在这种情况。 OrderBy 不允许保留原始排序,因为它没有这样的索引
    • 肯定是的,但这是否回答了为什么人们期望字段名而不是SQL 列名,这是整个问题吗? @OrderBy 不能使用列名吗?为什么会这样?就是这么简单。我还是不明白。
    • 为什么基于对象的 API 会使用数据存储(列)名称?这不是 SQL 替代品。开发人员正在处理类并指定他/她的类有一个使用其他类的其他字段排序的字段。如果你想在所有地方都使用 SQL,那么只需使用 JDBC
    • 没有矛盾。 OrderColumn 允许用户指定数据存储中代理索引列的列名,就像 Column 允许用户设置字段持久保存到的列名(即模式信息)一样。 OrderBy 是一种查询机制,因此像 JPQL 一样使用字段名称
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 2017-12-25
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多