私はHibernateで初心者で、SetMaxResults()
関数を使用していくつかのエラーが発生しています。これは私のMySQLのテーブルデータである::SetMaxResults()がHibernateで動作しない
1 J. C. Smell
2 J. C. Smell
3 J. C. Smell
4 J. C. Smell
これは、4つの同一記録から1つのレコードを取得する方法です。
private Person findPerson(Session session, String name){
Query query = session.createQuery("from Person p where p.name=:name");
query.setParameter("name", name);
query.setMaxResults(1);
Person person = (Person)query.list();
if(person == null)
return null;
return person;
}
は、私は1つのレコードが、例外に従ってレコードのArrayListのを取得していますを得ることを期待します。例外はこの行から来ます Person person = (Person)query.list();
その行のソースコードには34
という数字があります。これは例外です。
java.lang.ClassCastException: java.util.ArrayList cannot be cast to chapter3.simple.Person
at chapter3.simple.RankingTest.findPerson(RankingTest.java:34)
at chapter3.simple.RankingTest.savePerson(RankingTest.java:41)
at chapter3.simple.RankingTest.testSaveRanking(RankingTest.java:72)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
...
...
私は間違っていますか?おかげ
EDIT
こんにちは、はsetMaxResultsは、(1)の記録から1つの結果を返すこととしませんか?
こんにちは、setMaxResults(1)はレコードから1つの結果を返すとは考えていませんか? –
もちろん、エラーが発生する可能性があります。 'Person person =(Person)query.list()。get(0);' –
@EddyFreemanはいです。これは、リストの中にある1つの要素だけを返します。直接の人ではありません:) –