это мой репозиторий:
@Repository
public interface EventRepository extends JpaRepository<Events, Long>, JpaSpecificationExecutor<Events>{
@Query(value=" SELECT DISTINCT event.EVENT_ID "
+ "FROM EVENTS event "
+ "JOIN EVENTS event2 "
+ "ON event.EVENT_ID = event2.PARENT_ID "
+ "WHERE event.ENTITY_ID IN (?1)", nativeQuery = true)
List<Long> getDescendantEventIdInEntityId(Set<Long> descendantEntities);
}
Почему, когда этот метод вызывается, он возвращается: Внутреннее исключение: java.sql.SQLException: тип столбца недействителен Код ошибки: 17004 Вызов: SELECT DISTINCT event.EVENT_ID FROM EVENTS event JOIN EVENTS event2 ON event.EVENT_ID = event2.PARENT_ID WHERE event.ENTITY_ID IN (?) bind => [[1]]
что не так с запросом? Если запрос в порядке, является ли это «bind => [[1]]» истинной проблемой? Если да, то почему слишком много квадратных скобок?
Я также пробовал это решение:
@Query(value=" SELECT DISTINCT event2.EVENT_ID "
+ "FROM EVENTS event "
+ "JOIN EVENTS event2 "
+ "ON event.EVENT_ID = event2.PARENT_ID "
+ "WHERE event.ENTITY_ID IN :entitiesId", nativeQuery = true)
List<Long> getDescendantEventIdInEntityId(@Param("entitiesId") Set<Long> entitiesId);
но он возвращает мне другую ошибку: отсутствует параметр IN или OUT в индексе:: 1 Код ошибки: 17041 Вызов: SELECT DISTINCT event2.EVENT_ID FROM EVENTS event JOIN EVENTS event2 ON event.EVENT_ID = event2.PARENT_ID WHERE event.ENTITY_ID IN:entitiesId
РЕШЕНИЕ. Решено создание нового собственного запроса из EntityManager:
em.createNativeQuery(" SELECT DISTINCT event2.EVENT_ID "
+ "FROM EVENTS event "
+ "JOIN EVENTS event2 "
+ "ON event.EVENT_ID = event2.PARENT_ID "
+ "WHERE event.ENTITY_ID IN ("+idList+") AND event.STATUS = 2")
.getResultList();
Где idList — это строка, созданная StringUtils.join(CollectionOfId, ",");