Как создать запрос условия активного объекта "IN"

Мой текущий запрос, как показано ниже, и он отлично работает для одного пользователя:

1
ao.find(da.class, Query.select().where("user=?",user)

Теперь я хочу изменить этот запрос для получения данных нескольких пользователей, как показано ниже, но он не сработал и дал мне неверное имя столбца.

1
ao.find(da.class, Query.select().where("user IN (?)",user)

Также попробовал, применив одиночные цитаты. Даже один пользователь входит в значение параметра, то также не работает и дает ту же ошибку.

кто-нибудь может подсказать мне, что не так, и здесь нужно исправить?

Ошибка как,

 Caused by: java.sql.SQLException: Column not found: user in statement [SELECT * FROM       PUBLIC.AO_0371A8_da WHERE "user" IN (?)]
at org.hsqldb.jdbc.Util.throwError(Unknown Source)
at org.hsqldb.jdbc.jdbcPreparedStatement.<init>(Unknown Source)
at org.hsqldb.jdbc.jdbcConnection.prepareStatement(Unknown Source)
at org.apache.tomcat.dbcp.dbcp.DelegatingConnection.prep

ИЛИ когда - где ("используется"('?')"И проверено для одного пользователя

at java.lang.Thread.run(Thread.java:662)
Caused by: java.sql.SQLException: Column not found: user in statement [SELECT * FROM      PUBLIC.AO_0371A8_da WHERE "user" IN ('?')]
at org.hsqldb.jdbc.Util.throwError(Unknown Source)
at org.hsqldb.jdbc.jdbcPreparedStatement.<init>(Unknown Source)
at org.hsqldb.jdbc.jdbcConnection.prepareStatement(Unknown Source)
at org.apache.tomcat.dbcp.dbcp.DelegatingConnection.prepareState

Благодарю вас

2 ответа

Если вы хотите использовать IN-запросы, вам нужно составить список заполнителей самостоятельно. Вот фрагмент, взятый из: https://ecosystem.atlassian.net/browse/AO-263?focusedCommentId=69495&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel

MyEntity[] findEntities(Iterable<String> matchValues) {
    String placeholderCommaList = Joiner.on(", ").join(Iterables.transform(matchValues, Functions.constant("?")));
    Object[] matchValuesArray = Iterables.toArray(matchValues, Object.class);
    return ao.find(MyEntity.class, "primary_key_field_name", Query.select().where("match_field_name IN (" + placeholderCommaList + ")", matchValuesArray));
}

Важно, чтобы количество заполнителей ("?") Соответствовало количеству аргументов.

Надеюсь это поможет

Есть две проблемы.

Вы не можете получить несколько строк из базы данных с одним параметром в предложении IN. Этот запрос эквивалентен первому запросу. Для двух пользователей вам нужно IN(?,?), Для трех пользователей вам нужно IN(?,?,?).

Второй запрос выдает ошибки, вероятно, потому что имя столбца USER. Попробуйте другое имя для вашей переменной и столбца базы данных.

Всегда сообщайте об ошибке, когда вы запрашиваете решение проблемы.

Вы можете указать имя поля пользователя, если не можете его изменить. Но я не знаю, если ORM изменяет строку where или нет.

ao.find(da.class, Query.select().where("\"USER\" IN (?)",user)
Другие вопросы по тегам