jpa Sort 使用关联表的字段排序

关于Sort的使用查看该博客:

http://www.cnblogs.com/yanzhenxing/archive/2013/05/17/3083156.html


Sort部分代码:

------------------------------

List<Order> listOrder = new ArrayList<Order>();

listOrder.add(new Order(Direction.DESC,"auth"));

listOrder.add(new Order(Direction.DESC,"lockAccount"));

listOrder.add(new Order(Direction.DESC,"updateTime"));

Sortsort = new Sort(listOrder);

------------------------------

//由于字段lockAccount 属于User的关联表UserInfo , 所以抛出该异常. 

//org.springframework.data.mapping.PropertyReferenceException:

//No property lockAccount found for type User!

@Table(name ="user")

public class User  extends Validator {

    ``````

    @Getter

    @Setter

    @OneToOne(targetEntity = UserInfo.class,cascade = CascadeType.ALL, fetch = FetchType.EAGER, optional = false)

    @JoinTable(name ="user_user_info",

            joinColumns = @JoinColumn(name ="user_id", nullable = false),

            inverseJoinColumns =@JoinColumn(name = "user_info_id", nullable = false))

    private UserInfo  userInfo;

    ````

}


//解决办法找了很久 (并没有人告诉怎么弄),脑洞一开,就解决了,框架已经考虑过这个问题了.

//这两行代码修改为:

listOrder.add(newOrder(Direction.DESC,"userInfo.auth"));

listOrder.add(newOrder(Direction.DESC,"userInfo.lockAccount"));

 

生成sql:

 select ..***…***… 

    from user user0_ left 

    outerjoin user_user_info user0_1_ on user0_.id=user0_1_.user_id 

    inner join user_info userinfo1_ on user0_1_.user_info_id=userinfo1_.id 

    where 1=1  

    order byuserinfo1_.lock_account  desc, user0_.update_time desc 

    limit ?


结论:

    1 :在设计实体的已经做好了关联注解 

    2 :在生成Order的时候 , 使用关联表的 "变量名.字段"

    框架在解析Sort的时候 , 就会使用关联表的字段进行排序.

    希望能帮助遇到该问题的朋友 , 若有错误请指出 , 谢谢

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章