无法在Hibernate中创建SessionFactory对象。

问题描述 投票:1回答:1

我得到 "ERROR: 无法从数据库中获取SequenceInformation,java.sql.SQLException.Numeric Overflow "错误。Numeric Overflow "错误,当我试图创建SessionFactory对象时。我使用的是Java 1.8u74和hibernate 5.4.0版本。我的DB版本是12c。

请帮我解决这个问题。

以下是我的代码。

Student. java

package suman.examples;

public class Student {

private int ID;
private String NAME;

public int getID() {
    return ID;
}
public void setID(int iD) {
    ID = iD;
}
public String getNAME() {
    return NAME;
}
public void setNAME(String nAME) {
    NAME = nAME;
}

}

hibernate.cfg.xml。

    <?xml version='1.0' encoding='UTF-8'?>
    <!DOCTYPE hibernate-configuration SYSTEM "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

 <hibernate-configuration>
 <session-factory>

    <property name="hbm2ddl.auto">update</property>
    <property name="dialect">org.hibernate.dialect.Oracle12cDialect</property>
    <property name="connection.url">jdbc:oracle:thin:@hostname:1523:scdevr12</property>
    <property name="connection.username">apps</property>
    <property name="connection.password">apps</property>
    <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
    <property name="connection.pool_size">50</property>
    <property name="hibernate.show_sql">true</property>

    <mapping resource="student.hbm.xml" />

</session-factory>
</hibernate-configuration>

学生.hbm.xml

 <?xml version='1.0' encoding='UTF-8'?>  
 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

 <hibernate-mapping>

<class name="suman.examples.Student" table="STUDENT" >

    <meta attribute="class-description">This class contains the employee details</meta>

    <id name="ID" column="ID" type="int">
        <generator class="assigned"></generator>
    </id>

    <property name="NAME" column="NAME" not-null="true"></property>

</class>

</hibernate-mapping>

MainClass.java

package suman.examples;

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

public class MainClass {
    static SessionFactory factory;
    static Session session;
    public static void main(String[] arg) {
//      StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();
//      Metadata meta = new MetadataSources(ssr).getMetadataBuilder().build(); 
        System.out.println("Entered main method");
    try {
        try {
            factory = new Configuration().configure().buildSessionFactory();
//          factory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
//          factory = meta.getSessionFactoryBuilder().build();
            System.out.println("Factory created");
        }catch(Exception e) {
            e.printStackTrace();
        }
//  session = factory.openSession();
//  Transaction tx = session.beginTransaction();
//      try {
//          Employee e = new Employee();
//          e.setEmpId(1);
//          e.setEmpName("suman");
//          System.out.println(session.save(e));
//          tx.commit();
//      }catch(Exception e) {
//          if(tx != null) tx.rollback();
//          e.printStackTrace();
//      }finally {
//          session.close();
//      }
    }catch(Exception e) {
        e.printStackTrace();
    }
    }
}

项目结构图

记录器。

Entered main method
Jan 02, 2020 9:49:40 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {5.4.0.Final}
Jan 02, 2020 9:49:40 PM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
Jan 02, 2020 9:49:41 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
Jan 02, 2020 9:49:43 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)
Jan 02, 2020 9:49:43 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001005: using driver [oracle.jdbc.driver.OracleDriver] at URL [jdbc:oracle:thin:@hostname:1523:scdevr12]
Jan 02, 2020 9:49:43 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001001: Connection properties: {user=apps, password=****}
Jan 02, 2020 9:49:43 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001003: Autocommit mode: false
Jan 02, 2020 9:49:43 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init>
INFO: HHH000115: Hibernate connection pool size: 50 (min=1)
Jan 02, 2020 9:49:51 PM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.Oracle12cDialect
Jan 02, 2020 9:50:34 PM org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentImpl sequenceInformationList
ERROR: Could not fetch the SequenceInformation from the database
java.sql.SQLException: Numeric Overflow
    at oracle.jdbc.driver.NumberCommonAccessor.throwOverflow(NumberCommonAccessor.java:4136)
    at oracle.jdbc.driver.NumberCommonAccessor.getLong(NumberCommonAccessor.java:634)
    at oracle.jdbc.driver.GeneratedStatement.getLong(GeneratedStatement.java:206)
    at oracle.jdbc.driver.GeneratedScrollableResultSet.getLong(GeneratedScrollableResultSet.java:259)
    at oracle.jdbc.driver.GeneratedResultSet.getLong(GeneratedResultSet.java:558)
    at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.resultSetMinValue(SequenceInformationExtractorLegacyImpl.java:134)
    at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.extractMetadata(SequenceInformationExtractorLegacyImpl.java:60)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentImpl.sequenceInformationList(JdbcEnvironmentImpl.java:403)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentImpl.<init>(JdbcEnvironmentImpl.java:268)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:114)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:94)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214)
    at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:152)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:286)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:243)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214)
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:175)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:119)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:84)
    at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:474)
    at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:85)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:689)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724)
    at suman.examples.MainClass.main(MainClass.java:18)

Jan 02, 2020 9:50:40 PM org.hibernate.type.BasicTypeRegistry register
INFO: HHH000270: Type registration [byte[]] overrides previous : org.hibernate.type.BinaryType@21362712
Jan 02, 2020 9:50:40 PM org.hibernate.type.BasicTypeRegistry register
INFO: HHH000270: Type registration [[B] overrides previous : org.hibernate.type.BinaryType@21362712
Jan 02, 2020 9:50:41 PM org.hibernate.type.BasicTypeRegistry register
INFO: HHH000270: Type registration [Byte[]] overrides previous : org.hibernate.type.WrapperBinaryType@bc57b40
Jan 02, 2020 9:50:41 PM org.hibernate.type.BasicTypeRegistry register
INFO: HHH000270: Type registration [[Ljava.lang.Byte;] overrides previous : org.hibernate.type.WrapperBinaryType@bc57b40
Jan 02, 2020 9:50:41 PM org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection
INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@5445f5ba] 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.
Jan 02, 2020 9:51:37 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 17026, SQLState: 99999
Jan 02, 2020 9:51:37 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: Numeric Overflow
Jan 02, 2020 9:51:37 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PoolState stop
INFO: HHH10001008: Cleaning up connection pool [jdbc:oracle:thin:@hostname:1523:scdevr12]
org.hibernate.exception.GenericJDBCException: Unable to build DatabaseInformation
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99)
    at org.hibernate.tool.schema.internal.Helper.buildDatabaseInformation(Helper.java:140)
    at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:96)
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:183)
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:72)
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:309)
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:462)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:708)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724)
    at suman.examples.MainClass.main(MainClass.java:18)
Caused by: java.sql.SQLException: Numeric Overflow
    at oracle.jdbc.driver.NumberCommonAccessor.throwOverflow(NumberCommonAccessor.java:4136)
    at oracle.jdbc.driver.NumberCommonAccessor.getLong(NumberCommonAccessor.java:634)
    at oracle.jdbc.driver.GeneratedStatement.getLong(GeneratedStatement.java:206)
    at oracle.jdbc.driver.GeneratedScrollableResultSet.getLong(GeneratedScrollableResultSet.java:259)
    at oracle.jdbc.driver.GeneratedResultSet.getLong(GeneratedResultSet.java:558)
    at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.resultSetMinValue(SequenceInformationExtractorLegacyImpl.java:134)
    at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.extractMetadata(SequenceInformationExtractorLegacyImpl.java:60)
    at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.initializeSequences(DatabaseInformationImpl.java:65)
    at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.<init>(DatabaseInformationImpl.java:59)
    at org.hibernate.tool.schema.internal.Helper.buildDatabaseInformation(Helper.java:132)
    ... 8 more
Picked up JAVA_TOOL_OPTIONS: -Djava.vendor="Sun Microsystems Inc."
hibernate overflow numeric sessionfactory
1个回答
0
投票

我会把这个int改成long。

看上去数据类型是long,比int大,所以当赋值发生时,就会有溢出,你的数据就会溢出 SessionFactory 爆炸。请看堆栈跟踪中的这一行。

在oracle.jdbc.driver.GeneratedResultSet.getLong(GeneratedResultSet.java:558)

把类型改成长型,看看你能不能把你的 Hibernate SessionFactory 启动和运行。

© www.soinside.com 2019 - 2024. All rights reserved.