【问题标题】:Hibernate @Formula annotation causing sql exception errors when hibernate inserts table reference inappropriately当hibernate不恰当地插入表引用时,Hibernate @Formula注解导致sql异常错误
【发布时间】:2014-02-26 13:04:52
【问题描述】:

我正在尝试使用 Hibernate @Formula 将一些计算出的信息导入到我的一个实体类中。这是代码:

@Formula("(select max(site_visits.`date`) from site_visits where site_visits.siteId = id)")
@Temporal(TemporalType.TIMESTAMP)
private Date lastSiteVisit;

我已经手动尝试了查询,它工作正常。问题是当我请求对象时,休眠的 SQL 生成被破坏:它坚持将自己的表引用插入到我的列引用表达式的中间,所以我得到以下 SQL 错误:

Unknown column 'site_visits.site0_.date' in 'field list'

知道如何解决这个问题吗?

【问题讨论】:

    标签: java mysql hibernate


    【解决方案1】:

    使用别名

    @Formula("(select max(sv.date) from site_visits sv where sv.siteId = id)")
    

    也不要在查询中使用 `

    【讨论】:

    • 我的印象是“日期”是保留的 SQL 关键字,因此如果在字段名称中使用,则需要转义。事实证明并非如此,但如果我使用的字段名称是 SQL 关键字,我将如何应对?
    • 我认为最好使用别名,如果您的表名也是 sql 关键字,则使用 schema_name.table_name 但如果您问我,将 SQL 关键字用作列或表绝不是一个好主意名称
    猜你喜欢
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    • 2017-04-01
    相关资源
    最近更新 更多