ハードコードされたSQLクエリではなく、より最適なソリューションは、休止状態のCriteriaを使用しています。 Userクラスの@Entityアノテーションを宣言し、テーブルの列に対応するプライベートフィールドを作成する必要があります。
ID、名前、および年齢のUserテーブルがあるとします。
@Entity
@Table(name = "User")
public class User{
private long id;
private String userName;
private int age;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(unique = true, nullable = false)
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
@Column(name = "userName", nullable = false)
public String getUserName() {
return this.userName;
}
@Column(name = "age")
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return this.age;
}
注:Userクラスは、次にようになります。データベーステーブル内の列があなたのフィールドとして正確同じ名前を持っている場合、@Column(名=「..」)注釈が必要ではありません。
次に、年齢を取得することになります:Userクラスによって基準を作成
は
int userAge = session.createCriteria(User.class)
.add(Restrictions.ge("age", a))
.add(Restrictions.le("age", b))
.setProjection(Property.forName("age"))
.uniqueResult();
ユーザーテーブルからを選択するために休止状態に伝えます。その後、制限はが意味するところ年齢> =と年齢それぞれ< = B、。 uniqueResult()は、単一の結果を期待していることをhibernateに通知します。投影は特定の列を取得するために必要です(プロットはから選択を意味します)。投影が指定されていない場合は、デフォルトでクラス全体が返されます。select * from User。
私はあなたが必要とするものには少し複雑すぎると思っていますが、あなたのテーブルに合ったエンティティとCriteriaを使って作業するのが正しい方法です。
ure missing ":aとbの前に、" u.age "は年齢ではなく。このタイプミスですか?もしそうなら、 'u.age from user.u.age.aと:b'の間でu.ageを選択してみてください。 – kommradHomer