次のマッピングをSEU
@Entity
public class User {
private Integer id;
@Id;
private Integer getId() {
return this.id;
}
}
IdがIntegerであることに注意してください。次に、like演算子を使用してこのHQLクエリが必要です
Query query = sessionFactory.getCurrentSession().createQuery("from User u where u.id like :userId");
ATT:IT IS like演算子NOT =(等しい演算子)
それから私は使用します
List<User> userList = query.setParameter("userId", userId + "%").list();
しかし、HibernateがIllegalArgumentExceptionがUser.idのgetterを呼び出して発生したと文句を言うので機能しません
使っても
query.setString("userId", userId + "%");
それは動作しません
クエリを渡すには何を使用すればよいですか?
Hibernateリファレンスによると:
str()は、数値または時間値を読み取り可能な文字列に変換するために使用されます
だから私が使うとき
from User u where str(u.id) like :userId
うまくいきます
まあ、LIKE演算子は通常、テキストデータ、つまりVARCHARまたはCHAR列で使用され、数値id
列(INTEGER)があります。
id
フィールドを文字列としてもマッピングして、クエリでそのフィールドを使用することもできます。データベースエンジンによっては、これが機能する場合と機能しない場合があります。 setId()
を介してすべての更新を処理し、idAsString
フィールドを読み取り専用と見なす必要があることに注意してください。
@ Entity public class User { private Integer id; private String idAsString; @ Id; private Integer getId(){ return this.id; } private void setId(Integer id){ this.id = id; } @Column(name = "id"、insertable = false、updatable = false) private String getIdAsString( ){ return this.idAsString; } private void setIdAsString(String idAsString){ this.idAsString = idAsString; } }
次に、クエリは次のようになります。
Query query = sessionFactory.getCurrentSession().createQuery("from User u where u.idAsString like :userId");
List<User> userList = query.setParameter("userId", userId + "%").list();