2014-09-15 109 views
5

"Id" ile bir kategori almak için bir yöntemim var ve bir "kategori" ile bir kategori almak için benzer bir yönteme ihtiyacım var. Hibernate kullanarak bu yöntemleri yaptım. Bir Kategoriyi ada göre almak için ikinci yöntemimi nasıl düzeltebilirim? Benim kaynak kodu aşağıdaki gibidir:Hazırda bekleme SQLQuery - Nesneyi isme göre al

java.lang.ClassCastException: org.hibernate.impl.SQLQueryImpl com, yapılamıyor olabilir

// It works 
@Override 
public Category getById(int id) { 
    return (Category) sessionFactory.getCurrentSession().get(Category.class, id); 
} 

// It doesn't works 
@Override 
public Category getByName(String name) { 
    return (Category) sessionFactory.getCurrentSession(). 
     createSQLQuery("SELECT FROM Category WHERE name="+name); 
} 

Ben ikinci yöntemi ile bu hata var. sedae.model.Category

Bunlar benim denetleyicimdir.

Şimdiden teşekkürler. Eğer tabloda kategori adının başına sadece bir giriş olması eminseniz

cevap

4

o zaman Query#uniqueResult kullanabilirsiniz:

Query query= sessionFactory.getCurrentSession(). 
     createQuery("from Category where name=:name"); 
query.setParameter("name", name); 
Category category = (Category) query.uniqueResult(); 

uniqueResult tarafından atılan istisnalar işlemek için emin olun.

+0

Teşekkürler dostum! Bir soru daha lütfen. İki kategoriye sahip olduğumu varsayalım (farklı kimlikleriyle, açıkça) Sorgudan kaçınarak belirli bir kategoriyi nasıl alabilirim? "Sorgu benzersiz bir sonuç döndürmedi: 2". ? – wilson

+0

Bu durumda sorgu bir liste döndürür, listenin üzerinde yineleyebilir ve istediğiniz nesneyi alabilir veya aynı kategori adına sahip herhangi bir nesneyi isterseniz, 'query.setMaxResults (1); Belirtilen kategori adıyla ilk karşılaşılan kategoriyi döndürür. – user3487063

+0

@wilson, çözüm sizin için işe yaraydı mı? – user3487063

İlgili konular