私はSpring Dataを使用しており、次のクエリを作成しました:
public interface UserRepository extends JpaRepository<User, Long>, QueryDslPredicateExecutor<User> {
@Modifying
@Query("DELETE FROM User u WHERE u.userDetails.userName = :username")
public void deleteByUserName(@Param("username") String userName);
}
実行時に私は取得し続けます:
ERROR: org.hibernate.engine.jdbc.spi.SqlExceptionHelper - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'cross join UserDetails userdetail1_ where User_Name='rb2x5yv7'' at line 1
MySQL5Dialect で MySql を使用しています。
クエリの何が問題になっていますか?
**
アップデート:
**
このスレッドに続いて、コードを変更しました:
public interface UserRepository extends JpaRepository<User, Long>, QueryDslPredicateExecutor<User> {
@Modifying
@Query("DELETE FROM User u WHERE u.id in (SELECT u1.id FROM User WHERE u1.userDetails.userName = :username)")
public void deleteByUserName(@Param("username") String userName);
}
しかし、今私は得ています:
org.hibernate.QueryException: Unable to resolve path [u1.id], unexpected token [u1] [DELETE FROM com.bs.dal.domain.User u WHERE u.id in (SELECT u1.id FROM com.bs.dal.domain.User WHERE u1.userDetails.userName = :username)]
**
更新 2:
**
サブクエリで「u1」が欠落していたようです。クエリを次のように変更しました。
@Query("DELETE FROM User u WHERE u.id in (SELECT u1.id FROM User u1 WHERE u1.userDetails.userName = :username)")
今私は得ています:
org.hibernate.exception.GenericJDBCException: You can't specify target table 'Users' for update in FROM clause.
SELECT 部分で使用するのと同じテーブルを変更できないため、この問題が発生することはわかっています。
どうすれば回避できますか?助言がありますか?