SQLSyntaxErrorException в предложении Hibernate Где - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь использовать предложение Where для фильтрации пустых объектов.

т.е.

 @Where(clause = "size(userTracking) > 0 OR size(userResults) > 0")

В

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "user_id", insertable = false, updatable = false)
@LazyCollection(LazyCollectionOption.FALSE)
@Where(clause = "size(userTracking) > 0 OR size(userResults) > 0")
private List<UserSession> userSessions  = new ArrayList<UserSession>();

И в сеансах пользователя

@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "user_session_id", updatable = false)
@LazyCollection(LazyCollectionOption.FALSE)
private List<UserResult> userResults = new ArrayList<UserResult>();

@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "user_session_id", updatable = false)
@LazyCollection(LazyCollectionOption.FALSE)
private List<UserTracking> userTracking = new ArrayList<UserTracking>();

Однако я получаю ошибку

Caused by: java.sql.SQLSyntaxErrorException: FUNCTION database.size does not exist

Можно ли использовать предложение @Where таким образом?

Это не дубликат

Запрос HQL, чтобы проверить, равен ли размер коллекции 0 или пуст

Я просто говорю, что .size () здесь не работает.

.size тоже не работает

Java.sql.SQLSyntaxErrorException: Unknown column 'userTracking.size' in 'where clause'

Я также пробовал "не пусто", однако

 java.sql.SQLSyntaxErrorException: 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 'usersessio0_.EMPTY OR usersessio0_.userResults IS usersessio0_.EMPTY) and users' at line 1

1 Ответ

1 голос
/ 14 мая 2019

@Where определяет SQL WHERE, а не HQL WHERE, поэтому вам нужно написать:

@Where(clause = "user_session_id IN ( SELECT xxx FROM UserTracking ) OR user_session_id IN ( SELECT xxx FROM UserResult )")

где xxx - как бы ни были названы эти столбцы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...