繁体   English   中英

Hibernate Where子句中的SQLSyntaxErrorException

[英]SQLSyntaxErrorException in Hibernate Where clause

我正在尝试使用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>();

在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

@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是那些列的名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM