Java Postgres中的错误整数2147483649(其BIGINT值)错误

Java Postgres中的错误整数2147483649(其BIGINT值)错误,java,hibernate,postgresql,hilo,Java,Hibernate,Postgresql,Hilo,我使用Hibernate3和hilo键生成器以及Postgres9.3。表列是BIGINT,模型类变量是long(java) 从后端没有问题,但当我尝试从前端控制台保存时,显示错误的整数“2147483649”错误。 表架构为: CREATE TABLE user_log ( id bigint NOT NULL, appuser_id bigint, user_role_id bigint, login_time timestamp without time zone, l

我使用Hibernate3和hilo键生成器以及Postgres9.3。表列是BIGINT,模型类变量是long(java)

从后端没有问题,但当我尝试从前端控制台保存时,显示错误的整数“2147483649”错误。 表架构为:

CREATE TABLE user_log
(
  id bigint NOT NULL,
  appuser_id bigint,
  user_role_id bigint,
  login_time timestamp without time zone,
  logout_time timestamp without time zone,
  logged_in_ip character varying(32),
  CONSTRAINT user_log_pkey PRIMARY KEY (id),
  CONSTRAINT fk_app_user FOREIGN KEY (appuser_id)
      REFERENCES app_user (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT fk_user_role FOREIGN KEY (user_role_id)
      REFERENCES user_role (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)
模型类:

public class UserLog extends ModelBase {

/** identifier field */
private Long id;

/** persistent field */
private AppUser user;

/** nullable persistent field */
private Date loginTime;

/** nullable persistent field */
private Date logoutTime;

/** nullable persistent field */
private UserRole loggedInRole;

/** nullable persistent field */
private String loggedInIP;

/**
 * @hibernate.id generator-class="hilo"  column="id"
 * 
 */
public Long getId() {
    return this.id;
}

public void setId(Long id) {
    this.id = id;
}

/**
 * @hibernate.many-to-one
 * @hibernate.column name="user_role_id"
 * 
 */
public UserRole getLoggedInRole() {
    return loggedInRole;
}

public void setLoggedInRole(UserRole loggedInRole) {
    this.loggedInRole = loggedInRole;
}

/**
 * @hibernate.property column="login_time" type="java.util.Date"
 * 
 */
public Date getLoginTime() {
    return loginTime;
}

public void setLoginTime(Date loginTime) {
    this.loginTime = loginTime;
}

/**
 * @hibernate.property column="logout_time" type="java.util.Date"
 * 
 */
public Date getLogoutTime() {
    return logoutTime;
}

public void setLogoutTime(Date logoutTime) {
    this.logoutTime = logoutTime;
}

/**
 * @hibernate.many-to-one
 * @hibernate.column name="appuser_id"
 * 
 */
public AppUser getUser() {
    return user;
}

public void setUser(AppUser user) {
    this.user = user;
}

/**
 * @hibernate.property column="logged_in_IP" length="32"
 * 
 */
public String getLoggedInIP() {
    return loggedInIP;
}

public void setLoggedInIP(String loggedInIP) {
    this.loggedInIP = loggedInIP;
}
}

错误堆栈跟踪:

 org.postgresql.util.PSQLException: Bad Integer 2147483649
    at org.postgresql.jdbc1.AbstractJdbc1ResultSet.toInt(AbstractJdbc1ResultSet.java:857)
    at org.postgresql.jdbc1.AbstractJdbc1ResultSet.getInt(AbstractJdbc1ResultSet.java:282)
    at org.apache.commons.dbcp.DelegatingResultSet.getInt(DelegatingResultSet.java:186)
    at org.hibernate.id.TableGenerator.doWorkInCurrentTransaction(TableGenerator.java:140)
    at org.hibernate.engine.TransactionHelper$1Work.doWork(TransactionHelper.java:38)
    at org.hibernate.engine.transaction.Isolater$JdbcDelegate.delegateWork(Isolater.java:187)
    at org.hibernate.engine.transaction.Isolater.doIsolatedWork(Isolater.java:43)
    at org.hibernate.engine.TransactionHelper.doWorkInNewTransaction(TransactionHelper.java:51)
    at org.hibernate.id.TableGenerator.generate(TableGenerator.java:94)
    at org.hibernate.id.TableHiLoGenerator.generate(TableHiLoGenerator.java:62)
    at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:99)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
    at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
    at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
    at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535)
    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)
    at org.springframework.orm.hibernate3.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:541)
    at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:312)
    at org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:538)
    at com.dimensionsgroup.campus.core.dao.impl.CampusDaoSupport.create(CampusDaoSupport.java:43)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:288)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:155)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:122)
    at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:51)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
    at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:51)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:174)
    at $Proxy9.create(Unknown Source)
    at com.dimensionsgroup.campus.common.action.LoginAction.go(LoginAction.java:137)
    at com.dimensionsgroup.campus.common.action.AbstractAction.execute(AbstractAction.java:113)
    at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:168)
    at com.opensymphony.xwork.interceptor.DefaultWorkflowInterceptor.intercept(DefaultWorkflowInterceptor.java:55)
    at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
    at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
    at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
    at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
    at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
    at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
    at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
    at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
    at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
    at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
    at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
    at com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:115)
    at com.opensymphony.webwork.dispatcher.ServletDispatcher.serviceAction(ServletDispatcher.java:272)
    at com.opensymphony.webwork.dispatcher.ServletDispatcher.service(ServletDispatcher.java:237)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:879)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Unknown Source)

当Hibernate尝试为
user\u log
表创建新id时,会发生此错误

在您的应用程序中,Hibernate使用
org.Hibernate.id.TableGenerator
生成id,而id又希望返回一个整数。这会导致异常,因为下一个可用id大于
Integer.MAX\u值

似乎您使用的是低于3.5的Hibernate版本,因为

同样,这里支持的返回类型是任何支持的返回类型 通过数据类型持有者。从3.5开始,这是新的。在此之前 生成器仅返回整数值


因此,即使您在表和POJO中使用了正确的数据类型,TableGenerator也只能返回整数,除非您更新到更新的Hibernate版本。

当Hibernate尝试为
用户日志创建新id时,会发生错误

在您的应用程序中,Hibernate使用
org.Hibernate.id.TableGenerator
生成id,而id又希望返回一个整数。这会导致异常,因为下一个可用id大于
Integer.MAX\u值

似乎您使用的是低于3.5的Hibernate版本,因为

同样,这里支持的返回类型是任何支持的返回类型 通过数据类型持有者。从3.5开始,这是新的。在此之前 生成器仅返回整数值


因此,即使在表和POJO中使用了正确的数据类型,TableGenerator也只能返回整数,除非更新到更新的Hibernate版本。

将Hibernate版本3.0更改为3.2后,问题已解决。

将Hibernate版本3.0更改为3.2后,问题已解决。

从错误中可以看出,前端可能使用Integer作为数据类型,其值超过了int-datattype的值。最小值为-2147483648。(-2^31)最大值为2147483647(包括)。(2^31-1)。我知道,但为什么在使用bigint时使用作为整数。添加错误堆栈traceI已将id int修改为bigint。在开始时,表和模型类中都是integer,请尝试将Long更改为BigInteger。从错误中可以看出,前端可能使用integer作为数据类型,并且其值超过了int datattype的值。最小值为-2147483648。(-2^31)最大值为2147483647(包括)。(2^31-1)。我知道,但为什么在使用bigint时使用作为整数。添加错误堆栈traceI已将id int修改为bigint。在开始时,表和模型类中都是整数,请尝试将Long更改为biginger。根据我当前的调试,我发现hibernate_unique_key表存在问题,它的值不大于整数。根据我当前的调试,我发现hibernate_unique_key表存在问题,它不取整数中较大的值。当hibernate在“hibernate\u unique\u key”(下一个\u hi)中找到BIGINT值时,它抛出错误Bad Integer。我认为密钥生成的内部操作是使用整数参数运行的。但我不知道如何更改。根据我当前的调试,我发现hibernate\u unique\u key table存在问题,它的值不大于整数。根据我当前的调试,我发现hibernate\u unique\u key table存在问题,它不取整数中较大的值。当hibernate在“hibernate\u unique\u key”(下一个\u hi)中找到BIGINT值时,它抛出错误Bad Integer。我认为密钥生成的内部操作是使用整数参数运行的,但我不知道如何更改。