为什么构建UserSession的时候使用的是User的loginLowerCase而不是login

为什么构建UserSession的时候使用的是User的loginLowerCase而不是login。
image
如果使用大写用户名,CUBA会有什么限制。

因为用户名不区分大小写,统一使用小写便于检索

1 个赞

便于检索是具体指什么?
我现在遇到一个问题是系统集成了另外一个系统的单点登录,用户名是全大写的,用户通过认证登录后,由于UserSession使用的是小写查询,导致我使用:session的Ds数据都查询不出来,例如:
select e from dataapplicationsys$RequestBaseInfo e where e.createdBy = :session$userLogin order by e.requestTs desc
这样设计的原因是什么呢?还是推荐我Ds的query不要使用 :session?

1 个赞

你好,
试一下搜索不要区分大小写。

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

1 个赞

直接写成

select e from dataapplicationsys$RequestBaseInfo e where LOWER(e.createdBy) = :session$userLogin order by e.requestTs desc
更好吧

3 个赞

如果可以保证 session里的 userLogin 值是小写,这样没问题。
用 (?i) 的话会自动将参数值转化成小写。

3 个赞

用户名是大写,这个用户生产出来的数据,createBy存的值是大写的值,由于使用的是session,而session中的userLogin是小写,所以数据查询不出来。

3 个赞

新建持久化对象会在EclipseLinkDescriptorEventListener中的prePersist方法中设置createBy
53
可以看到使用的是user的login
12

4 个赞

It is very useful to me,thanks a lot.