私のSpring Boot Webアプリケーションでは、データベースからエンティティを削除するためのメソッドを提供するコントローラがあります。このメソッドは、DAOクラスを呼び出します。私はentityManager.remove(entity)
を呼び出すときにしかし、私はentity
がちょうどデータベースから取得し、entity
を変えたかもしれない私のAPIへの他の呼び出しがなかったたにもかかわらず、StaleObjectStateException
を受けます。エンティティを削除するときにStaleObjectStateExceptionが発生するのはなぜですか?
これは私のコントローラである:
@Transactional
@RestController
public class AppAdminController {
...
@RequestMapping(value = "/admins/{username}", method = RequestMethod.DELETE)
public void deleteAdmin(@PathVariable("username") String username) {
dao.removeByUsername(username);
}
}
DAO:
@Service
public class AppAdminDao extends AbstractDAO<UUID, AppAdmin> {
public AppAdmin getByUsername(String username) {
TypedQuery<AppAdmin> query = em.createQuery("SELECT a FROM AppAdmin a WHERE a.username=:username", AppAdmin.class);
query.setParameter("username", username);
try {
return query.getSingleResult();
} catch (NoResultException e) {
return null;
}
}
public void removeByUsername(String username) {
AppAdmin admin = getByUsername(username);
if(admin != null) {
em.remove(admin);
}
}
}
AppAdmin aa
は
AppAdmin res = em.merge(aa);
とさえエンティティを追加すると、例外を生成した直後em.remove(res)
を呼び出すことを呼び出すことによって追加されます上記の通り。私は間違って何をしていますか?
それはあなたの保存されていない値のマッピングは、エンティティのために欠落していることだろうか? によって、Spring Data JPAを使用してみませんか?あなたのDaoはこれまで圧縮できます: public interface ChainLevelRepository extends JpaRepository {} –
PaulNUK
保存されていない値のマッピングを追加するにはどうすればいいですか?私はSpring Data JPAを見ていきます – user2035039