Внутренняя ошибка сервера с запросом SQL - PullRequest
0 голосов
/ 05 июля 2018

Я новичок в hibernate, но у меня есть приблизительное представление о том, что обычно делать, в этом случае я не могу сказать, что это работает. Я пытаюсь создать систему фильтрации, которая позволяет вам сортировать разных клиентов в этом случае с пользователями. Мой SQL-запрос работает правильно:

  SELECT * FROM [de_user_site] WHERE [deactivation_time] = '9999-12-31 00:00:00.000' AND [user_id] IN (SELECT [user_id] FROM [de_users] WHERE [client_id] = 1)

И я попытался превратить это в Java-запрос:

        queryStr = "SELECT e FROM DeSiteUser e " + queryStr;
        String queryStr = " WHERE e.deactivationTime = '9999-12-31 00:00:00.000' ";
        if (clientId != null) {
            queryStr += String.format("AND e.userId IN (SELECT id FROM DeUser u WHERE ");

        if (clientId != null) {
            queryStr += String.format("u.clientId = %d ", clientId);
        }
    }

Однако у меня возникла проблема с этим:

Internal Server Error [#500]: org.hibernate.hql.internal.ast.QuerySyntaxException: expecting CLOSE, found 'null' near line 1, column 214 [SELECT e FROM com.velatt.dartentitlements.domain.DeSiteUser e WHERE e.deactivationTime = '9999-12-31 00:00:00.000' AND e.userId IN (SELECT id FROM com.velatt.dartentitlements.domain.DeUser u WHERE u.clientId = 6 ]

Кто-нибудь знает, что я забыл, мой SQL-запрос правильный, но я не понимаю, почему он не сработал для Java-запроса?

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Пожалуйста, замените ваш код ниже. вы пропустили добавление ')' в качестве подзапроса и.

queryStr = "SELECT e FROM DeSiteUser e " + queryStr;
    String queryStr = " WHERE e.deactivationTime = '9999-12-31 00:00:00.000' ";
    if (clientId != null) {
        queryStr += String.format("AND e.userId IN (SELECT id FROM DeUser u WHERE ");

    if (clientId != null) {
        queryStr += String.format("u.clientId = %d )", clientId);
    }
}
0 голосов
/ 05 июля 2018

Вы пропустили закрытые скобки. Ошибка говорит обо всем.

SELECT e FROM com.velatt.dartentitlements.domain.DeSiteUser e WHERE e.deactivationTime = '9999-12-31 00:00:00.000' AND e.userId IN (SELECT id FROM com.velatt.dartentitlements.domain.DeUser u WHERE u.clientId = 6 

Ваш код должен иметь закрыть фигурные скобки примерно так

queryStr = "SELECT e FROM DeSiteUser e " + queryStr;
String queryStr = " WHERE e.deactivationTime = '9999-12-31 00:00:00.000' ";
if (clientId != null) {
    queryStr += String.format("AND e.userId IN (SELECT id FROM DeUser u WHERE ");
    queryStr += String.format("u.clientId = %d ", clientId);
    queryStr += " ) ";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...