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的時候 , 就會使用關聯表的字段進行排序.

    希望能幫助遇到該問題的朋友 , 若有錯誤請指出 , 謝謝

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