2015-09-11 4 views
1

Я использую hibernate 3 с генератором ключей hilo и Postgres 9.3. Таблицей столбца является BIGINT, а переменная класса модели длинна (java).Bad Integer 2147483649 (его значение BIGINT) в Postgres

Из-за проблем с концом нет, но когда я пытаюсь сэкономить с передней консоли, отображается ошибка Bad Integer «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) 
+0

Из-за ошибки кажется, что передняя часть может использовать Integer в качестве типа данных, а его значение больше, чем у int datattype. Минимальное значение - 2,147,483,648. (- 2^31) Максимальное значение составляет 2,147,483,647 (включительно). (2^31 -1). –

+0

Я знаю это, но зачем использовать Integer, пока я использую bigint. –

+0

добавить свою трассировку стека ошибок – Srinu

ответ

0

ошибка происходит, когда Hibernate пытается создать новый идентификатор для Таблица user_log.

В вашем приложении Hibernate использует org.hibernate.id.TableGenerator для генерации идентификаторов, которые в свою очередь хотят вернуть целое число. Это приводит к исключению, поскольку следующий доступный идентификатор больше Integer.MAX_VALUE.

Кажется, что вы используете версию Hibernate < 3,5 с Javadoc говорит:

Опять же, возвращаемые типы поддерживаемых здесь являются любые из тех, поддерживаемых по IntegralDataTypeHolder. Это новое, начиная с 3.5. До этого генератор возвращал только значения Integer.

Таким образом, даже если вы использовали правильные типы данных в своей таблице и в своем POJO, TableGenerator может возвращать только целые числа, если вы не обновляетесь до новой версии Hibernate.

+0

В соответствии с моей текущей отладкой я устанавливаю эту проблему с таблицей hibernate_unique_key, не получая значения больше целого. –

+0

В соответствии с моей текущей отладкой я создаю эту проблему с помощью таблицы hibernate_unique_key, не принимая значения, которое больше от целого. Когда hibernate обнаружил значение BIGINT в «hibernate_unique_key» (next_hi), он выдает ошибку Bad Integer. Я думаю, что внутренние манипуляции для генерации ключей работают с параметрами Integer. Но я не знаю, как это изменить. –

0

после смены версии спящего режима с 3,0 до 3,2 проблема решена.

 Смежные вопросы

  • Нет связанных вопросов^_^