gpt4 book ai didi

java - 过滤实体的数据库不可知方式?

转载 作者:行者123 更新时间:2023-12-04 14:00:13 26 4
gpt4 key购买 nike

我使用 Spring Data、Hibernate 和 Microsoft SQL Server。我有 2 个实体:RolePrivilege .一个角色拥有多项特权。特权有VALID_TO柱子。
我希望每个角色都只拥有仍然有效的权限(即 VALID_TO <= GETDATE() )。

我发现实现这一点的最简单方法是注释 Privilege具有 Hibernate 的实体 @Where注释,像这样:

// ...
@Where(clause = "VALID_TO <= GETDATE()")
class Privilege {
// ...
}

但是这种方法的缺点是它使用了 Transact-SQL;如果迁移到另一个数据库,它将导致额外的返工。
此外,这种方法使代码依赖于 Hibernate 注释。

有没有办法使用纯 Spring Data 过滤掉特权?

最佳答案

您可以使用 jOOQ将 SQL 转换为您选择的任何其他方言,使用编程 API(如果您可以动态生成谓词)或 parser ,它也可以以 JDBC driver proxy 的形式放置在您的应用程序和 JDBC 驱动程序之间。 .这样,您可以继续使用 GETDATE() ,并且根据目标方言,您将获得正确的输出。
当然,对于您问题的具体情况,使用 CURRENT_TIMESTAMP 可能是您最安全的选择,因为它得到了广泛的支持(包括 SQL Server),因此对于这种情况,您不需要任何其他第三方。
免责声明:我为 jOOQ 背后的公司工作

关于java - 过滤实体的数据库不可知方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49884675/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com