2016-10-10 76 views
0

我有類:通過獲得Criteria.list關鍵

Entity 
@Table(name = "oldusers") 
public class User implements UserDetails { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int id; 
    ...... 
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "userId", cascade =  CascadeType.ALL) 
    List<User> usertList= new ArrayList<>(0); 

    public List<User> getUserList() { 
     return userList; 
    } 

@Table(name = "user") 
public class Usert implements Serializable { 
    int userId; 
    int position; 
    String name; 
    List<Exercise> list = new ArrayList<>(0); 
    OldsUser userId; 

@ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "parentid") 
    public OldUser getUserId() { 
     return this.userId; 
    } 
} 

我需要獲得通過idOldUser.For所有的用戶,我已經寫了下面的代碼

Criteria criteria = session.createCriteria(User.class); 
criteria.add(Restrictions.eq("parentid", idOldUser)); 

但沒有得到:(

+0

錯誤org.hibernate.QueryException:無法解析屬性:parentid:ap.entity.User – Sergei

+0

你有兩個類「User」和「Usert」,其中「OldsUser」或者它到底是什麼? – Omoro

+0

兩個班。頂部是OlsUser,底部是用戶 – Sergei

回答

0

這是一個有點複雜,但我想你應該需要什麼改變標準是這樣的:

Criteria criteria = session.createCriteria(User.class); 
criteria.add(Restrictions.eq("userId.id", idOldUser)); 

你的parentId實際上是oldUser。你初始化你的OldUser爲userId在你的Usert類(我相信Usert類顯示User類,而頂部的類顯示OldUser類取決於你的評論)

0

The Restriction.eq me的ThOD需要接收映射的字段名稱,而不是列名,我不是很瞭解你的映射邏輯,但這裏有一個標準的例子,應該工作:

Criteria criteria = session.createCriteria(Usert.class); 
criteria.add(Restrictions.eq("userId", idOldUser)); 

如果你想查詢你的User類,則需要在其中映射一個字段,並正確使用限制。

+0

中密鑰字段的名稱,如果使用泛型而不是User.claas: 類類型; ............................ Criteria criteria = session.createCriteria(type); 我如何使用標準? – Sergei

+0

和爲什麼當我從數據庫創建OldUser時,我有OldUser.listUser = null?在表「」用戶「中的DB中,我看到parentid = id OldUser。 – Sergei