1

ヒロ キー ジェネレーターと Postgres 9.3 で休止状態 3 を使用しています。テーブル列は BIGINT で、モデル クラス変数は long(java) です。

バックエンドからは問題ありませんが、フロントエンド コンソールから保存しようとすると、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)
4

2 に答える 2

0

Hibernate がテーブルの新しい ID を作成しようとすると、エラーが発生しuser_logます。

あなたのアプリでは、Hibernate はorg.hibernate.id.TableGeneratorID を生成するために使用します。ID は整数を返したいと考えています。次に利用可能な ID が より大きいため、これは例外につながりますInteger.MAX_VALUE

Javadocに次のように記載されているため、Hibernate バージョン < 3.5 を使用しているようです。

繰り返しますが、ここでサポートされている戻り値の型は、IntegralDataTypeHolder でサポートされているもののいずれかです。これは 3.5 の新機能です。それ以前は、このジェネレーターは整数値のみを返していました。

そのため、テーブルと POJO で正しいデータ型を使用したとしても、新しい Hibernate バージョンに更新しない限り、TableGenerator は整数のみを返すことができます。

于 2015-09-11T07:31:39.087 に答える