2016-10-10 6 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; 
    } 
} 

を私はコード

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

の下に書かれていることをidOldUser.Forですべてのユーザーを取得する必要がありますしかし、何も得られない:(

+0

エラーorg.hibernate.QueryException:プロパティを解決できませんでした:parentid of:ap.entity.User – Sergei

+0

"User"と "Usert"の2つのクラスがあり、 "OldsUser"はどこですか? – Omoro

+0

2つのクラス。トップはOlsUser、下はユーザ – Sergei

答えて

0

それは少し複雑だったが、私はあなたがこのような判断基準を変更することを必要とするべきだと思う:

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

あなたがPARENTIDは実際にoldUserです。あなたはUsertクラスとしてUsernameとして初期化しました(UsertクラスはUserクラスを示し、上のクラスはあなたのコメントに応じてOldUserクラスを示しています)

0

Restriction.eq me THODは、私は非常にあなたのマッピングのロジックを理解できない、マップされたフィールド名ではなく列名を受信する必要があるが、ここでは動作するはず基準の例です:

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

を、あなたを照会する場合Userクラスの場合、その内部にフィールドをマップし、その制限を適切に使用する必要があります。

+0

代わりにgenericを使用する場合User.claas: クラスタイプ; ............................ 基準criteria = session.createCriteria(type); 基準はどのように使用できますか? – Sergei

+0

と、なぜ私はDBからOldUserを取得すると、私はOldUser.listUser = nullを持っていますか?テーブル "" user "のDBでは、parentid = id OldUserが表示されます。 – Sergei

関連する問題