为什么构建UserSession的时候使用的是User的loginLowerCase而不是login。
如果使用大写用户名,CUBA会有什么限制。
因为用户名不区分大小写,统一使用小写便于检索
便于检索是具体指什么?
我现在遇到一个问题是系统集成了另外一个系统的单点登录,用户名是全大写的,用户通过认证登录后,由于UserSession使用的是小写查询,导致我使用:session的Ds数据都查询不出来,例如:
select e from dataapplicationsys$RequestBaseInfo e where e.createdBy = :session$userLogin order by e.requestTs desc
这样设计的原因是什么呢?还是推荐我Ds的query不要使用 :session?
你好,
试一下搜索不要区分大小写。
select e from dataapplicationsys$RequestBaseInfo e where e.createdBy = :(?i)session$userLogin order by e.requestTs desc
https://doc.cuba-platform.cn/manual-7.0-chs/datasource_query_case_insensitive.html
直接写成
select e from dataapplicationsys$RequestBaseInfo e where LOWER(e.createdBy) = :session$userLogin order by e.requestTs desc
更好吧
如果可以保证 session里的 userLogin 值是小写,这样没问题。
用 (?i) 的话会自动将参数值转化成小写。
用户名是大写,这个用户生产出来的数据,createBy存的值是大写的值,由于使用的是session,而session中的userLogin是小写,所以数据查询不出来。
新建持久化对象会在EclipseLinkDescriptorEventListener中的prePersist方法中设置createBy
可以看到使用的是user的login
It is very useful to me,thanks a lot.