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
这是怎么回事啊?
リスト<連絡先> リスト = null;
クエリクエリ = s.createQuery("サービスから");
リスト = query.list();
リストには Contact が含まれていますが、Service をクエリしています。これは型の不一致が原因です。クエリが Service であることを確認したら、それを List<Service> に変更してください。
コレクション ジェネリック List<Contact> は消去後に型を持たないため、ここで定義されたコレクション型は結果の型と一致する必要があります。