我有一个Spring数据JPA实体
@Entity
public class User {
private static final long serialVersionUID = 1L;
@Id
private Long id;
我想包括一个属性mutualFriends
,它是使用SpEL
和EvaluationContext扩展模型对查询用户原则
(在Spring Security中)进行查询的结果:
下面是SpEL的例子,我想到了这样的东西:
@Formula("select count(friendship) from Friendship friendship where " +
"friendship.owner.id = id " +
"and friendship.friend in " +
"(SELECT f.friend FROM Friendship f where f.owner.id = " +
"?#{principle != null ? principal.id : id}) ")
private Integer mutualFriends;
验证用户身份时使用相同的实体(用户
),因此我需要一些逻辑来确定原则
是否可用,或者我得到了一个错误:
原因:org。postgresql。util。PSQLException:没有为参数2指定值。
?#{principle != null ? principal.id : id}
这个格式正确吗?
下面是当我得到异常时执行的hibernate查询的相关部分:
select user0_.id as id1_19_, user0_.created_by as created_2_19_, user0_.created_date as created_3_19_, user0_.last_modified_by as last_mod4_19_, user0_.last_modified_date as last_mod5_19_, user0_.activated as activate6_19_, user0_.activation_key as activati7_19_, user0_.avatar_url as avatar_u8_19_, user0_.banner_url as banner_u9_19_, user0_.description as descrip10_19_, user0_.email as email11_19_, user0_.first_name as first_n12_19_, user0_.lang_key as lang_ke13_19_, user0_.last_name as last_na14_19_, user0_.login as login15_19_, user0_.online as online16_19_, user0_.password_hash as passwor17_19_, user0_.reset_date as reset_d18_19_, user0_.reset_key as reset_k19_19_, user0_.test_data as test_da20_19_,
SpEL/JPA正确地实现了将id
替换为user0_. id
,但是仍然缺少一些东西?此外,它不出现选择计数(user0_。友谊)从友谊中friendship.friend(选择f.friend从友谊ff.owner.id=COALESCE(?#{原则!=null?principal.id:user0_. null},user0_. id))和friendship.owner.id=user0_. idformula2_
部分的查询已被正确解析?
我认为问题可能是在SpEL上下文中,id
是未知的。将SpEL表达式替换为
COALESCE(?#{principle != null ? principal.id : null},id)
我们应该做到这一点。
抱歉,完全错过了明显的:
@Formula
是一个Hibernate的东西。它对SpEL一无所知,也不知道这些表达式。
你所能做的,以及你链接到的例子所做的是:在你的存储库中创建一个方法,添加一个@Query
注释,并在其中使用SpEL。
问题内容: 我有一个mysql查询,其中的列CreationDate的格式为“时间戳”。例子: 我想让sql查询以这种方式设置格式(12hr格式,秒): 我想在sql级别而不是php或.js等处处理此问题。 询问: 问题答案: 您将要使用: MySQL文档将显示您将使用哪些说明符来获取所需的格式(请参见SQL Demo )。 如果要保留秒数,则将使用:
这可以在单个sql查询中完成吗?或者我必须在循环中对每个房间进行查询吗?还是在一次查询中转储整个数据集,然后在pyhton中处理它更有效率?这是一个很小的数据集,但我有兴趣知道哪一个是最有效的方法。 先谢谢你,马丁 下面是我的表结构:
我正在创建一个Lua库来帮助处理发送和接收DNS请求,目前正在阅读这个(DNS协议RFC),但我不知道如何正确格式化请求。例如,我是否必须指定消息的长度?我该怎么做? 我了解,从我的Wireshark检查,我应该也包括选项之后。我还在响应中看到一个;这是否意味着我只需在添加值之前,将请求名称终止为零? 我特别谈论的部分是RFC的4.1.3。 一些注意事项:我使用个人服务器对此进行了测试,并在查询部
我试图将从PostgreSQL表中提取的字符串(使用索引聚合数组)转换为正确格式化的日期进行查询。我的问题是我的日期格式不同,包括YYYY、Mon-yyy和DD-Mon-y。我的计划是创建日期范围,以包含由模糊日期表示的所有可能时间。例如,“2000”将转换为“2000年1月1日”和“2000年12月31日”,并根据自定义输入日期范围进行测试。同样,“2014年2月”也将改为“2014年1月1日”
searchd将全部成功执行的搜索查询都记录在查询日志文件中。以下是一个类似记录文件的例子: [Fri Jun 29 21:17:58 2007] 0.004 sec [all/0/rel 35254 (0,20)] [lj] test [Fri Jun 29 21:20:34 2007] 0.024 sec [all/0/rel 19886 (0,20) @channel_id] [lj] te
我们可以看到格式化就是通过格式字符串得到特定格式: format!("{}", foo) -> "3735928559" format!("0x{:X}", foo) -> "0xDEADBEEF" format!("0o{:o}", foo) -> "0o33653337357" 根据使用的参数类型,同样的变量(foo)能够格式化成不同的形式:X, o 和未指定形式。 这个格式化的功能是通过 t