java - 为什么hibernate查询表集报错?
怪我咯
怪我咯 2017-04-18 10:53:11
0
2
554

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import qiye.Impl.ServiceDaoImpl;
import qiye.entity.Contact;
import qiye.entity.Service;


public class TestJava {
    private static SessionFactory sessionFactory;
    static{
        Configuration configuraction = new Configuration().configure();
        sessionFactory = configuraction.buildSessionFactory();
    }
    public static Session getSession(){
        return sessionFactory.openSession();
    }
   
    
    public static List<Contact> getContactList(){
        Session s = null;
        List<Contact> list = null;
        try{
            s = TestJava.getSession();
            Query query = s.createQuery("from Service");
            list = query.list();
            for(Contact contact : list){
                System.out.println(contact.getAddress());
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            if(s!=null){
               s.close();
            }
        }
        return list;
    }
    
    public static void main(String[] arg){
        TestJava.getContactList();
        
        System.out.println("hello");
        
    }
}

报错信息:

三月 29, 2017 4:49:54 下午 org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {5.2.7.Final}
三月 29, 2017 4:49:54 下午 org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
三月 29, 2017 4:49:54 下午 org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
三月 29, 2017 4:49:54 下午 org.hibernate.boot.jaxb.internal.stax.LocalXmlResourceResolver resolveEntity
WARN: HHH90000012: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/hibernate-mapping. Use namespace http://www.hibernate.org/dtd/hibernate-mapping instead.  Support for obsolete DTD/XSD namespaces may be removed at any time.
三月 29, 2017 4:49:55 下午 org.hibernate.boot.jaxb.internal.stax.LocalXmlResourceResolver resolveEntity
WARN: HHH90000012: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/hibernate-mapping. Use namespace http://www.hibernate.org/dtd/hibernate-mapping instead.  Support for obsolete DTD/XSD namespaces may be removed at any time.
三月 29, 2017 4:49:55 下午 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)
三月 29, 2017 4:49:55 下午 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001005: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/qiye?useUnicode=true&characterEncoding=UTF-8]
三月 29, 2017 4:49:55 下午 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001001: Connection properties: {user=root, password=****}
三月 29, 2017 4:49:55 下午 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001003: Autocommit mode: false
三月 29, 2017 4:49:55 下午 org.hibernate.engine.jdbc.connections.internal.PooledConnections <init>
INFO: HHH000115: Hibernate connection pool size: 20 (min=1)
三月 29, 2017 4:49:55 下午 org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect
三月 29, 2017 4:49:56 下午 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection
INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@345c5f] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.
三月 29, 2017 4:49:56 下午 org.hibernate.hql.internal.QueryTranslatorFactoryInitiator initiateService
INFO: HHH000397: Using ASTQueryTranslatorFactory
Hibernate: 
    select
        service0_.ID as ID1_1_,
        service0_.TITLE as TITLE2_1_ 
    from
        SERVICE service0_
java.lang.ClassCastException: qiye.entity.Service cannot be cast to qiye.entity.Contact
    at TestJava.getContactList(TestJava.java:33)
    at TestJava.main(TestJava.java:47)
hello

这是怎么回事啊?

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(2)
伊谢尔伦

List<Contact> list = null;

Query query = s.createQuery("from Service");
list = query.list();

你的list里面是Contact,但是你查询的是Service,类型不匹配造成的,如果你确认查询的就是Service,改成List<Service>就行了

刘奇

集合泛型List<Contact>,在擦除之后就没有类型了,因此,在这里定义的集合类型需要与结果类型一致,泛型之间不存在多态

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板