私は冬眠するのが初めてで、アプリケーションの1つで試していました。アノテーション セッション ファクトリ Bean を使用することを選択し、エディターはクエリに名前を付けた DB から各テーブルのエンティティ クラスを生成しました。hibernateTemplate.findByAll
うまくいきました。しかし、試してみるとhibernateTemplate.findByNamedQuery("findById", "<some_id>")
、エラーが発生しました。java.lang.IndexOutOfBoundsException: Remember that ordinal parameters are 1-based.
少しグーグルした後、複数のソリューションを試しました:
- エディターによって生成された namedQuery を : から :
@NamedQuery(name = "Table.findById", query = "SELECT u FROM Table t WHERE t.id = :id")
に変更しまし@NamedQuery(name = "Table.findById", query = "SELECT u FROM Table t WHERE t.id = ?")
たが、同じエラーが発生しました。 - 使用しようとし
hibernateTemplate.findByNamedParam
ましたが、エラーが発生しました:java.lang.IllegalArgumentException: node to traverse cannot be null!
hibernateTemplate.find() を使用してこれを達成できますが、フィールドに基づいてレコードをフェッチするためにこれらのメソッドを使用できるとドキュメントに記載されているため、findByNamedQuery/Param メソッドを使用して同じことを達成するにはどうすればよいですか?