【问题标题】:Update/Delete in type safe way - via usage of something like CriteriaQuery?以类型安全的方式更新/删除 - 通过使用 CriteriaQuery 之类的东西?
【发布时间】:2013-01-07 15:40:56
【问题描述】:

是否有可能对实体进行更新/删除类型的安全操作,例如使用 CriteriaQuery 进行查询?

我在这里的具体情况是,当我想在一段时间后使用 EclipseLink 删除一些实体集时,我想避免本地查询。我正在使用日期比较和使用本机 SQL 接近。你认为这对我的情况来说是最好的用例吗?我个人认为 ORM 提供者应该做 SQL 并避免使用原生 SQL。

提前感谢您的建议, 西蒙

【问题讨论】:

    标签: jpa orm eclipselink


    【解决方案1】:

    Criteria API 尚不支持批量操作,但您可以使用常规 JPQL 更新和删除查询。提供者会将它们翻译成 SQL。大多数情况下不需要自己编写原生 SQL。

    例如 - 提高员工工资然后解雇他:

    UPDATE Employee e
    SET e.salary = 99999
    WHERE e.salary = 88888
    
    
    DELETE FROM Employee e
    WHERE e.salary = 99999
    

    【讨论】:

    • 谢谢,但由于无法在批量操作中使用与 JPQL 进行日期比较,就像在你的示例中一样,我使用了 Native,这就是我想避免它的原因。如果有可能当然
    • @SimeonAngelov - “没有办法”是什么意思?您可以使用日期对象或日期文字进行操作,就像 JPQL 中的其他类型一样,无论是否批量。你有什么特殊情况不起作用吗?
    • 当我在 Internet 的资源流中读到时,没有与 JPQL 相关的日期,对吗?我的特殊情况是我想使用 Query.executeUpdate() 函数删除具有过期时间的实体,而不是使用本机查询或使用源代码: 1. String query = "DELETE FROM A WHERE lastUsedTime
    猜你喜欢
    • 2011-11-17
    • 2011-10-12
    • 1970-01-01
    • 2016-02-23
    • 2015-02-28
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多