我在配置我的第一个hibernate程序时遇到了问题,但在这个过程的最后一步我被卡住了。这是堆叠竞赛:
Dec 01, 2015 6:54:34 PM org.hibernate.cfg.Environment <clinit>
INFO: Hibernate 3.5.6-Final
Dec 01, 2015 6:54:34 PM org.hibernate.cfg.Environment <clinit>
INFO: hibernate.properties not found
Dec 01, 2015 6:54:34 PM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: Bytecode provider name : javassist
Dec 01, 2015 6:54:34 PM org.hibernate.cfg.Environment <clinit>
INFO: using JDK 1.4 java.sql.Timestamp handling
Dec 01, 2015 6:54:34 PM org.hibernate.cfg.Configuration configure
INFO: configuring from resource: hibernate.cfg.xml
Dec 01, 2015 6:54:34 PM org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: Configuration resource: hibernate.cfg.xml
Dec 01, 2015 6:54:34 PM org.hibernate.cfg.Configuration addResource
INFO: Reading mappings from resource : edu/aspire/li/Student.hbm.xml
Dec 01, 2015 6:54:34 PM org.hibernate.cfg.HbmBinder bindRootPersistentClassCommonValues
INFO: Mapping class: edu.aspire.li.Student -> STUDENT
Dec 01, 2015 6:54:34 PM org.hibernate.cfg.Configuration doConfigure
INFO: Configured SessionFactory: null
Dec 01, 2015 6:54:34 PM org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: Using Hibernate built-in connection pool (not for production use!)
Dec 01, 2015 6:54:34 PM org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: Hibernate connection pool size: 20
Dec 01, 2015 6:54:34 PM org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: autocommit mode: false
Dec 01, 2015 6:54:34 PM org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: using driver: oracle.jdbc.OracleDriver at URL: jdbc:oracle:thin:@localhost:1521:XE
Dec 01, 2015 6:54:34 PM org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: connection properties: {user=system, password=****, autocommit=false}
Dec 01, 2015 6:54:35 PM org.hibernate.cfg.SettingsFactory buildSettings
INFO: RDBMS: Oracle, version: Oracle Database 11g Release 11.1.0.0.0 - Production
Dec 01, 2015 6:54:35 PM org.hibernate.cfg.SettingsFactory buildSettings
INFO: JDBC driver: Oracle JDBC driver, version: 10.2.0.1.0XE
Dec 01, 2015 6:54:35 PM org.hibernate.dialect.resolver.StandardDialectResolver resolveDialectInternal
WARNING: Oracle 11g is not yet fully supported; using 10g dialect
Dec 01, 2015 6:54:35 PM org.hibernate.dialect.Dialect <init>
INFO: Using dialect: org.hibernate.dialect.Oracle10gDialect
Dec 01, 2015 6:54:35 PM org.hibernate.engine.jdbc.JdbcSupportLoader useContextualLobCreation
INFO: Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException
Dec 01, 2015 6:54:35 PM org.hibernate.transaction.TransactionFactoryFactory buildTransactionFactory
INFO: Transaction strategy: org.hibernate.transaction.JDBCTransactionFactory
Dec 01, 2015 6:54:35 PM org.hibernate.transaction.TransactionManagerLookupFactory getTransactionManagerLookup
INFO: No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
Dec 01, 2015 6:54:35 PM org.hibernate.cfg.SettingsFactory buildSettings
INFO: Automatic flush during beforeCompletion(): disabled
Dec 01, 2015 6:54:35 PM org.hibernate.cfg.SettingsFactory buildSettings
INFO: Automatic session close at end of transaction: disabled
Dec 01, 2015 6:54:35 PM org.hibernate.cfg.SettingsFactory buildSettings
INFO: JDBC batch size: 15
Dec 01, 2015 6:54:35 PM org.hibernate.cfg.SettingsFactory buildSettings
INFO: JDBC batch updates for versioned data: disabled
Dec 01, 2015 6:54:35 PM org.hibernate.cfg.SettingsFactory buildSettings
INFO: Scrollable result sets: enabled
Dec 01, 2015 6:54:35 PM org.hibernate.cfg.SettingsFactory buildSettings
INFO: JDBC3 getGeneratedKeys(): disabled
Dec 01, 2015 6:54:35 PM org.hibernate.cfg.SettingsFactory buildSettings
INFO: Connection release mode: auto
Dec 01, 2015 6:54:35 PM org.hibernate.cfg.SettingsFactory buildSettings
INFO: Default batch fetch size: 1
Dec 01, 2015 6:54:35 PM org.hibernate.cfg.SettingsFactory buildSettings
INFO: Generate SQL with comments: enabled
Dec 01, 2015 6:54:35 PM org.hibernate.cfg.SettingsFactory buildSettings
INFO: Order SQL updates by primary key: disabled
Dec 01, 2015 6:54:35 PM org.hibernate.cfg.SettingsFactory buildSettings
INFO: Order SQL inserts for batching: disabled
Dec 01, 2015 6:54:35 PM org.hibernate.cfg.SettingsFactory createQueryTranslatorFactory
INFO: Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
Dec 01, 2015 6:54:35 PM org.hibernate.hql.ast.ASTQueryTranslatorFactory <init>
INFO: Using ASTQueryTranslatorFactory
Dec 01, 2015 6:54:35 PM org.hibernate.cfg.SettingsFactory buildSettings
INFO: Query language substitutions: {}
Dec 01, 2015 6:54:35 PM org.hibernate.cfg.SettingsFactory buildSettings
INFO: JPA-QL strict compliance: disabled
Dec 01, 2015 6:54:35 PM org.hibernate.cfg.SettingsFactory buildSettings
INFO: Second-level cache: enabled
Dec 01, 2015 6:54:35 PM org.hibernate.cfg.SettingsFactory buildSettings
INFO: Query cache: disabled
Dec 01, 2015 6:54:35 PM org.hibernate.cfg.SettingsFactory createRegionFactory
INFO: Cache region factory : org.hibernate.cache.impl.NoCachingRegionFactory
Dec 01, 2015 6:54:35 PM org.hibernate.cfg.SettingsFactory buildSettings
INFO: Optimize cache for minimal puts: disabled
Dec 01, 2015 6:54:35 PM org.hibernate.cfg.SettingsFactory buildSettings
INFO: Structured second-level cache entries: disabled
Dec 01, 2015 6:54:35 PM org.hibernate.cfg.SettingsFactory buildSettings
INFO: Echoing all SQL to stdout
Dec 01, 2015 6:54:35 PM org.hibernate.cfg.SettingsFactory buildSettings
INFO: Statistics: disabled
Dec 01, 2015 6:54:35 PM org.hibernate.cfg.SettingsFactory buildSettings
INFO: Deleted entity synthetic identifier rollback: disabled
Dec 01, 2015 6:54:35 PM org.hibernate.cfg.SettingsFactory buildSettings
INFO: Default entity-mode: pojo
Dec 01, 2015 6:54:35 PM org.hibernate.cfg.SettingsFactory buildSettings
INFO: Named query checking : enabled
Dec 01, 2015 6:54:35 PM org.hibernate.cfg.SettingsFactory buildSettings
INFO: Check Nullability in Core (should be disabled when Bean Validation is on): enabled
Dec 01, 2015 6:54:35 PM org.hibernate.impl.SessionFactoryImpl <init>
INFO: building session factory
Exception in thread "main" org.hibernate.HibernateException: Unable to instantiate default tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer]
at org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:110)
at org.hibernate.tuple.entity.EntityTuplizerFactory.constructDefaultTuplizer(EntityTuplizerFactory.java:135)
at org.hibernate.tuple.entity.EntityEntityModeToTuplizerMapping.<init>(EntityEntityModeToTuplizerMapping.java:80)
at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:323)
at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:475)
at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:133)
at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:84)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:297)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1385)
at edu.aspire.daos.InsertStudent.main(InsertStudent.java:15)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:107)
... 9 more
Caused by: org.hibernate.PropertyNotFoundException: Could not find a getter for sname in class edu.aspire.li.Student
at org.hibernate.property.BasicPropertyAccessor.createGetter(BasicPropertyAccessor.java:328)
at org.hibernate.property.BasicPropertyAccessor.getGetter(BasicPropertyAccessor.java:321)
at org.hibernate.mapping.Property.getGetter(Property.java:304)
at org.hibernate.tuple.entity.PojoEntityTuplizer.buildPropertyGetter(PojoEntityTuplizer.java:299)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:158)
at org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:77)
... 14 more
我的映射文件(Student.hbm.xml):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="edu.aspire.li.Student" table="STUDENT">
<!-- id property -->
<id name="sno" column="SNO" type="integer" >
<!-- Primary key generator class -->
<generator class="assigned"/>
</id>
<!-- common properties -->
<property name ="sname" column="SNAME" type="string" length="100"/>
<property name ="email" column="EMAIL" type="string" length="100"/>
<property name ="mobile" column="MOBILE" type="long" not-null="true"/>
</class>
</hibernate-mapping>
我的hibernate配置文件(hibernate.cfg.xml):
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">oracle.jdbc.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@localhost:1521:XE</property>
<property name="connection.username">system</property>
<property name="connection.password">root</property>
<!-- Disable autocommit mode -->
<property name="hibernate.connection.autocommit">false</property>
<!-- Print all generated SQL statements to the console -->
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.use_sql_comments">true</property>
<!-- Use JDBC transactions -->
<property name="hibernate.transaction.factory_class">
org.hibernate.transaction.JDBCTransactionFactory </property>
<!-- Mapping POJO to TABLE in underlying Database. -->
<mapping resource="edu/aspire/li/Student.hbm.xml" />
</session-factory>
</hibernate-configuration>
和我的InsertStudent课程:
package edu.aspire.daos;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import edu.aspire.li.Student;
//Insert Student object as student record into DataBase
class InsertStudent {
public static void main(String[] args) {
// TODO Auto-generated method stub
Configuration cfg = new Configuration();
cfg.configure("hibernate.cfg.xml");
SessionFactory sf = cfg.buildSessionFactory();
//Open Session
Session s = sf.openSession();
//Begin transaction
Transaction tx=s.beginTransaction();
//Create Student object
Student s1 = new Student();
s1.setSno(1);
s1.setName("abc");
s1.setEmail("abc@aspire.com");
s1.setMobile(7788198899L);
s.save(s1);
s.flush();
tx.commit();
s.close();
}
}
我把我的学生类student.hbm.xml放在edu.aspx ire.li中,把我的插入学生类放在edu.asp ire.daos中,把hibernate.cfg.xml放在默认包中。
提前谢谢。
我在使用JDK11运行Spring Boot 2.0.5时遇到此错误。为了修复它,我不得不更新javassist库版本(Gradle是我的构建工具):
compile('org.javassist:javassist:3.23.1-GA') {force = true}
关于迁移到JDK11的更多信息,我发现这篇博客文章很有用。或者,将Spring Boot升级到2.1将修复此问题。
您在JDK 11上运行Spring Boot吗?当我切换到JDK11时,我也遇到了同样的问题。我通过更改Spring Boot版本解决了这个问题。
感谢@cpierceworld,我宣布我的学生为
package edu.aspire.li;
import java.io.Serializable;
public class Student implements Serializable{
private int sno;
private String name;
private String email;
private long mobile;
public Student(){
System.out.println("This is to construct student");
}
public int getSno() {
return sno;
}
public void setSno(int sno) {
this.sno = sno;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public long getMobile() {
return mobile;
}
public void setMobile(long mobile) {
this.mobile = mobile;
}
}
与student.hbm.xml 存在名称冲突
<property name ="sname" column="SNAME" type="string" length="100"/>