代码之家  ›  专栏  ›  技术社区  ›  KCL

定义列表的顺序

  •  10
  • KCL  · 技术社区  · 17 年前

    
    class A {
       @OneToMany
       @OrderBy("b.c.name, b.name") <---- this is the problem
       List<B> b;
    }
    
    class B {
       @ManyToOne
       C c;
       String name;
    }
    
    class C {
       String name;
    }
    

    是的,我尝试过不同的变体,例如@OrderBy(“c.name”)不起作用,我只是收到一条错误消息,告诉我实体类b不包含一个名为“c.name”的字段。

    5 回复  |  直到 17 年前
        1
  •  9
  •   ChssPly76    17 年前

        2
  •  2
  •   Grzegorz Oledzki    17 年前

    你可以做的就是创建一个这样的命名查询:

     SELECT b 
     FROM B b 
     WHERE b.a = :mya 
     ORDER BY b.c.name
    
        3
  •  0
  •   Chochos    17 年前

    你试过 @OrderBy("c.name", "name")

    您不应该使用“b”,因为这意味着@OrderBy将在b数组上的b实例的列上完成。

        4
  •  0
  •   Jack Leow    17 年前

    你试过:

     @OrderBy("c.name ASC", "name ASC")
    

    ?

        5
  •  0
  •   evg345    8 年前

    这在javax.persistence中是不可能的。OrderBy(比如ChssPly76),但当我使用Hibernate时,我在PLAIN SQL中用Formula()注释构造了一个新列,然后在上面构造了OrderBy:

    class A {
       @OneToMany
       @OrderBy("orderCol") <---- reference to virtual column
       List<B> b;
    }
    
    class B {
       @ManyToOne
       C c;
       String name;
    
       @org.hibernate.annotations.Formula(
         "( select C_table.name as orderCol from C_table where C_table.id = id )"
       ) <------------------------------------------ join with plain SQL statment
       String orderCol;
    }