MySQL 교차 결합 쿼리에서 최대 절전 모드 예외
다른 클래스인 FeaturesMetadata와 양방향의 ManyToOne 관계가 있는 Features 개체를 대량 삭제하려고 합니다.SQL Grammer를 사용하고 있습니다.예외가 발생했습니다.
사용 중인 hql:
String hql = "delete from Feature F where F.featuresMetadata.stateGeoId = :stateGeoId";
show SQL을 켜면 다음이 생성됩니다.
delete from FEATURE cross join FEATURESMETADATA featuresme1_ where STATEGEOID=?
SQL을 db 클라이언트에서 직접 실행하면 다음과 같은 예외가 발생합니다.
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 FEATURESMETADATA featuresme1_ where stategeoid='01'' at line 1
생성된 SQL이 Exception을 던지고 있기 때문에 MySQL5InnoDBDialect에서 MySQLInnoDBDialect로 방언 변경을 시도했지만 변경되지 않았습니다.
누가 도와줄 수 있습니까?
이러한 HQL 쿼리에 조인이 없을 수 있습니다.참고 문서에서 인용한 내용:
암시적이든 명시적이든 어떤 조인도 대량 HQL 쿼리에서 지정할 수 없습니다.하위 쿼리는 하위 쿼리 자체에 조인이 포함될 수 있는 where-clause에서 사용할 수 있습니다.
그래서 저는 이와 같은 것이 효과가 있어야 한다고 생각합니다.
delete from Feature F where F.id in
(select f2.id from Feature f2 where f2.featuresMetadata.stateGeoId = :stateGeoId)
저도 같은 문제를 가지고 있었고 합리적인 답을 찾기 위해 애를 먹었습니다.이 접근 방식을 사용하더라도 생성된 SQL은 (읽은 내용에 따르면) 매우 비효율적인 것 같습니다.
그래서 저는 한 걸음 뒤로 물러서서 다음과 같이 했습니다.
List<Properties> props = propDao.findPropertiesByHotelCode(hotel.getCode());
propDao.deleteInBatch(props);
propDao.flush();
기본적으로 '어디서 삭제'를 시도하는 것보다는, 어디서 선택한 다음 내가 검색한 세트를 일괄적으로 삭제하는 것입니다.
도움이 되길 바랍니다.
이것은 정말로 동면 상태 때문에 가난합니다.하지만 레포에서 이렇게 풀 수 있습니다. (적어도 포스트그레에서는)SQL, MySql에 대해 이 구문을 수정해야 하는지 확실하지 않음)
@Modifying
@Query(nativeQuery = true, value = """
DELETE FROM feature f
USING features_metadata fd
WHERE f.features_metadata_id = fd.id AND fd.state_geo_id = :stateGeoId
""")
void deleteByStateGeoIdId(@Param("stateGeoId") UUID stateGeoId);
언급URL : https://stackoverflow.com/questions/7246563/hibernate-exception-on-mysql-cross-join-query
'programing' 카테고리의 다른 글
누군가가 내 데이터베이스를 해킹했어요 - 어떻게요? (0) | 2023.09.15 |
---|---|
struct addrinfo와 struct sockaddr의 차이점은 무엇입니까? (0) | 2023.09.15 |
sprintboot strup에서 반응형 r2dbc 드라이버에 대한 플라이웨이 마이그레이션을 실행하는 방법 (0) | 2023.09.15 |
jQuery Element의 마진과 패딩을 얻는 방법? (0) | 2023.09.15 |
C11의 __STDC_VERSION__ 값은 얼마입니까? (0) | 2023.09.15 |