【问题标题】:Escape keywords from @where clause in Entity for Hibernate从 Entity for Hibernate 中的 @where 子句中转义关键字
【发布时间】:2018-08-14 10:07:23
【问题描述】:

我有一个实体类如下。

@Entity
@Table(name = "user_MAIN" )
public class userDetails implements Serializable {

    @Id
    @Column(name = "user_ID")
    private int userId;

    @OneToMany
    @JoinColumn(name = "user_ID", insertable = false, updatable = false)
    @Where(clause = "CAST(START_DATE AS DATE) <= CAST(getDate() AS DATE)")
    private Set<userContractBasic> userContract=new HashSet<userContractBasic>();

}

我想将其与 userContractBasic 实体与 where 条件 START_DATE &gt; current_date 一起加入。在这里,我只需要日期检查,而不是日期时间检查。所以我在@where 子句中添加了CAST
但是在获取所有结果时添加CAST 后的查询是:

SELECT  <fields>
FROM user_main um
LEFT OUTER JOIN user_contract uc ON um.user_id=uc.user_id
AND CAST(uc.START_DATE AS uc.DATE) <= CAST(getDate() AS uc.DATE)  

ON 子句中的 DATE 关键字前面带有表别名,它会破坏查询。

有什么办法可以避免吗?

【问题讨论】:

  • 我只是在这里猜测,但您可以尝试将 Date 括在方括号中:[Date] 吗?
  • @Dimitri- 已经尝试过了,但它不起作用。我得到它是uc.[DATE]
  • 尝试以下操作:uc."DATE"
  • 它被转换为CAST(uc.START_DATE AS 'DATE')。那里没有表别名,语法仍然不正确

标签: sql-server hibernate date orm


【解决方案1】:

您无需在此处指定 AS 关键字 只需通过以下方式更改您的@Where

@Where(clause = "CAST(START_DATE) <= CAST(getDate())")

【讨论】:

  • 感谢您对这个问题感兴趣。但正如问题中提到的,我需要比较date,而不是datetime。所以这个在这里行不通。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-13
  • 2019-09-30
  • 2016-03-03
  • 2015-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多