【问题标题】:SQLSyntaxErrorException in Hibernate Where clauseHibernate Where 子句中的 SQLSyntaxErrorException
【发布时间】:2019-09-30 20:53:15
【问题描述】:

我正在尝试使用 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 Query to check if size of collection is 0 or empty

我明确地说 .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

【问题讨论】:

  • 谢谢,我一直在尝试 - 原因:java.sql.SQLSyntaxErrorException:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“usersessio0_.EMPTY OR usersessio0_.userResults IS usersessio0_.EMPTY) 和用户”附近使用正确的语法
  • 谢谢。当我明确表示答案无效时,您将其标记为重复。但是感谢您强调语法上的差异。 X is not empty 也不起作用,请参阅上面的评论。我会试试 .size
  • @Where 定义了一个 SQL WHERE 子句,而不是 HQL WHERE 子句,因此您需要编写 @Where(clause = "user_session_id IN ( SELECT xxx FROM UserTracking ) OR user_session_id IN ( SELECT xxx FROM UserResult )")

标签: java hibernate


【解决方案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 是这些列的名称。

【讨论】:

    猜你喜欢
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 2020-06-19
    • 2014-09-10
    • 2011-06-16
    • 2015-09-20
    相关资源
    最近更新 更多