org.hibernate.exception.GenericJDBCException: could not prepare statement

hpf112867284 2016-02-22 08:47:43

public interface BaseEntity<ID extends Serializable> extends Serializable {
/**
* @return
*/
public abstract ID getId();

/**
* @param id
*/
public abstract void setId(ID id);
}

@Entity
@Table(name = "t_character_build")
public class CharacterBuild implements BaseEntity<Integer> {

/**
*
*/
private static final long serialVersionUID = -4265343379276247352L;

private Integer id;

private int charId;

private String stateInfo;


@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Override
public Integer getId() {
return id;
}

@Override
public void setId(Integer id) {
this.id = id;
}

@Column(name = "stateInfo")
public String getStateInfo() {
return stateInfo;
}

public void setStateInfo(String stateInfo) {
this.stateInfo = stateInfo;
}

@Column(name = "charId")
public int getCharId() {
return charId;
}

public void setCharId(int charId) {
this.charId = charId;
}

}


public class HibernateDBServcieImpl implements DBService {
private final SessionFactory sessionFactory;
private final HibernamteTemplate transTemplate = new TranHibernateTemplate();
private static final String DB_CHECK_SQL = "select 1";

@Override
public void update(final BaseEntity entity) throws DataAccessException {
transTemplate.doCall(new HibernateCallback<Object>() { //这里报错
@Override
public Object doCall(Session session) {
session.update(entity);
return null;
}
});

}

private interface HibernamteTemplate {
public <T> T doCall(HibernateCallback<T> callback);
}

private final class TranHibernateTemplate implements HibernamteTemplate {
@Override
public <T> T doCall(HibernateCallback<T> callback) {
Session _session = null;
Transaction _tr = null;
T _result = null;
try {
_session = sessionFactory.openSession();
_tr = _session.beginTransaction();
_result = callback.doCall(_session);
_tr.commit();
} catch (Exception e) {
if (_tr != null) {
_tr.rollback();
}
throw new DataAccessException(e); // 这里捕获到异常,有时没问题,有时就报错
} finally {
if (_session != null) {
_session.close();
}
}
return _result;
}
}
}

hibernate.cfg.xml文件.
<session-factory>
<property name="hibernate.dialect">
org.hibernate.dialect.MySQL5InnoDBDialect
</property>
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="hibernate.transaction.factory_class">
org.hibernate.transaction.JDBCTransactionFactory
</property>
<property name="hibernate.cache.provider_class">
org.hibernate.cache.NoCacheProvider
</property>
<property name="hibernate.cache.use_query_cache">
false
</property>
<property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&autoReconnect=true</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password"></property>
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="hibernate.show_sql">false</property>
<property name="hibernate.format_sql">false</property>
<property name="hibernate.hbm2ddl.auto">none</property>
<property name="hibernate.jdbc.batch_size">50</property>
<property name="hibernate.c3p0.maxIdleTime">180</property>
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.timeout">1000</property>
<property name="hibernate.c3p0.max_statements">20</property>
........
</session-factory>
...全文
594 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
hpf112867284 2016-02-22
  • 打赏
  • 举报
回复
具体的错误:

[WARN ] 2016-02-20 00:02:07:36 org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL Error: 0, SQLState: null
[ERROR] 2016-02-20 00:02:07:36 org.hibernate.engine.jdbc.spi.SqlExceptionHelper - An SQLException was provoked by the following failure: java.lang.InterruptedException
[ERROR] 2016-02-20 00:02:07:37 net.zckj.game.character.async.CharacterSave - #GS.CharacterBuildCompressSave.doIo.error.pid=40543
net.zckj.core.orm.DataAccessException: org.hibernate.exception.GenericJDBCException: could not prepare statement
	at net.test.core.orm.HibernateDBServcieImpl$TranHibernateTemplate.doCall(HibernateDBServcieImpl.java:229)
	at net.test.core.orm.HibernateDBServcieImpl.update(HibernateDBServcieImpl.java:74)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
	at java.util.concurrent.FutureTask.run(FutureTask.java:262)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:745)
Caused by: org.hibernate.exception.GenericJDBCException: could not prepare statement
	at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)
	at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
	at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:196)
	at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareStatement(StatementPreparerImpl.java:96)
	at org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl.buildBatchStatement(AbstractBatchImpl.java:152)
	at org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl.getBatchStatement(AbstractBatchImpl.java:141)
	at org.hibernate.engine.jdbc.batch.internal.BatchingBatch.getBatchStatement(BatchingBatch.java:79)
	at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:3232)
	at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:3183)
	at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:3525)
	at org.hibernate.action.internal.EntityUpdateAction.execute(EntityUpdateAction.java:159)
	at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:465)
	at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:351)
	at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:350)
	at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:56)
	at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1222)
	at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:425)
	at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
	at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:177)
	at net.zckj.core.orm.HibernateDBServcieImpl$TranHibernateTemplate.doCall(HibernateDBServcieImpl.java:224)
	... 14 more
hpf112867284 2016-02-22
  • 打赏
  • 举报
回复
报错的地方, 有时没有问题,能正常更新,有时就报错.

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧