67,512
社区成员
发帖
与我相关
我的任务
分享
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>
[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