我有一个包含8列 C1,C2,C3,C4,C5,C6,C7,C8 的表,其中 {C1,C2,C3}的组合< / em> 是一个复合键。
我想更新 仅C2的数据 ,但当我尝试更新时,显示异常:
org.hibernate.StaleStateException: Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1
at org.hibernate.jdbc.BatchingBatcher.checkRowCount(BatchingBatcher.java:93)
at org.hibernate.jdbc.BatchingBatcher.checkRowCounts(BatchingBatcher.java:79)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:58)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:195)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:230)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:296)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1007)
是否可以在Hibernate中更新它?
我正在使用代码 -
public static synchronized Session getSession() {
Session mysession = (Session) DAO.session.get();
if (mysession == null||!mysession.isOpen()) {
mysession = sessionFactory.openSession();
DAO.session.set(mysession);
}
return mysession;
}
protected void begin() {
try{
getSession().beginTransaction();
}catch(Exception ex)
{
LOGGER.error(ex);
}
} public void update(Facebook facebookdata){ begin();
getSession().update(facebookdata);
commit();
}
答案 0 :(得分:2)
您无法更新主键,因为这是Hibernate在您更新对象后用于检索对象的内容。这就是为什么你得到陈旧的异常,因为Hibernate期望一个具有相同主键的对象。
所以基本上你必须将你的主键改为其他东西,如递增数字或克隆对象保存它,然后删除旧的不正确的对象。
答案 1 :(得分:1)
根据您的描述,我发现您正在尝试更新主键。您能否发布用于进行更新的代码。
另外,您可能需要查看此post