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
这是怎么回事啊?
List<Contact> list = null;
Query query = s.createQuery("from Service");
list = query.list();
Your list contains Contact, but you are querying Service, which is caused by type mismatch. If you confirm that the query is Service, just change it to List<Service>
The collection generic List<Contact> has no type after erasure. Therefore, the collection type defined here needs to be consistent with the result type. There is no polymorphism between generics