データベースからレコードを削除しようとしていますが、削除する前に、その子の 1 つを別のレコードにコピーしているため、次のエラーが発生します。
SEVERE: org.hibernate.StaleStateException: Batch update returned unexpected row count
from update [0]; actual row count: 0; expected: 1
at org.hibernate.jdbc.Expectations$BasicExpectation.checkBatched(Expectations.java:81)
at org.hibernate.jdbc.Expectations$BasicExpectation.verifyOutcome(Expectations.java:73)
at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:59)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:3224)
at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:3126)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:3456)
at org.hibernate.action.internal.EntityUpdateAction.execute(EntityUpdateAction.java:140)
at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:364)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:356)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:278)
at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:328)
at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:52)
at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1234)
at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:404)
.....
1) 最初の関数で (レコード 18 からリストを取得し、新しいレコードに追加します)
....
User user = (User) session.get(User.class, 18L);
tx.commit();
User client = new User();
client.getmyList().setItems(user.getmyList().getItems());
return client;
2) 2 番目の関数で (レコード 18 を削除)
User user = (User) session.get(User.class, 18L);
session.delete(user);
3) 3 番目の関数 (新しいレコードを保存)
session.save(client);
ユーザークラス
@Entity
@DynamicUpdate
public class User{
.....
@OneToOne(cascade = CascadeType.ALL)
public UnitWatchList getmyList() {
return myList;
}
...
}