1

次のクエリを使用して、休止状態でデータベースからデータを取得しています

Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Query q = session.createSQLQuery("select name,addr1,addr2,postal_code,country,email," +
                "tel1,tel2,HeadOffice_id,Subscription_id from Restaurant " +
                "where id=" +id);
session.getTransaction().commit();
Restaurant rest = (Restaurant)result.get(0);

しかし、これは例外を返しています

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.hibernate.model.Restaurant

私もこの方法を試しましたが、何をしているのかわかりません

AnnotationConfiguration config = new AnnotationConfiguration();  
config.addAnnotatedClass(Restaurant.class);  
SessionFactory factory= config.configure().buildSessionFactory();  
Session session =factory.getCurrentSession();
session.beginTransaction();
Query q = session.createSQLQuery("select name,addr1,addr2,postal_code,country,email," +
                    "tel1,tel2,HeadOffice_id,Subscription_id from Restaurant " +
                    "where id=" +id);
java.util.List<Restaurant> result = (List<Restaurant>)q.list();
session.getTransaction().commit();
Restaurant rest = (Restaurant)result.get(0);

繰り返しますが、同じ例外が発生しています。どうすれば休止状態でこれを行うことができますか?

ありがとう

4

2 に答える 2

5

クエリはRestaurantエンティティのインスタンスを返しません。このエンティティから個々のフィールドを返します。このようなクエリの結果は、選択されたすべてのフィールドを含む、ですList<Object[]>Object[]

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#queryhql-select:を参照してください。

クエリは、Object[]型の配列として複数のオブジェクトやプロパティを返すことができます。

クエリでRestaurantのインスタンスを返す場合は、次のようになります。

select r from Restaurant r where id = :id

また、パラメータを渡すために連結を使用しないでください。上記のクエリとして名前付きパラメータを使用します。

于 2012-03-01T14:26:26.763 に答える
0

単純な:

Restaurant rest = (Restaurant)session.get(Restaurant.class, id);
于 2012-03-01T14:49:22.550 に答える