【发布时间】:2015-05-12 14:24:30
【问题描述】:
我在应用程序中有一个用户存储库,它非常适合这种情况:
@Query(" FROM UserEntity ue WHERE ue.site.id = :site_id
and ue.name = :username")
User findByUsername(@Param("site_id") String siteId,
@Param("username") String userName);
现在其中一个用户字段中有一个新选项,可以防止用户出现在应用程序的任何位置。因此,我决定使用硬编码子句仅修改存储库中的查询,而不是修改整个应用程序:
@Query(" FROM UserEntity ue WHERE ue.site.id = :site_id
and ue.name = :username and ue.state != 'Disabled'")
User findByUsername(@Param("site_id") String siteId,
@Param("username") String userName);
(更改部分为and ue.state != 'Disabled')
问题是,无论 state 的值是什么,这样的查询都不会返回任何内容。
我也尝试过ue.state not like 'Disabled',但结果相同。
我见过很多使用@Query 的例子,但没有找到任何带有硬编码子句的例子。这可能吗?
【问题讨论】:
-
您是否尝试过
not in以及您可以使 sql 为 true 并检查其生成的查询。 -
是的。我试过
not in ('Disabled')。结果相同 -
首先在 hibernate 配置文件中创建 sql 并测试您的查询作为控制台日志,它将打印查询。只需检查它的填充内容。您可以在 sqlbrowser 中检查相同的查询。
-
我忘了说用户类的状态是
@Enumerated(EnumType.STRING)。当我执行ue.accessState != com.something.AccessState.D时,它不会过滤掉任何内容,甚至会返回禁用用户 -
这就是我想要避免的,因为那将是相当大的重构。没有别的办法吗?