如何在 GenericDao 中检索常用值(IpAddress、TenantId)?
Posted
技术标签:
【中文标题】如何在 GenericDao 中检索常用值(IpAddress、TenantId)?【英文标题】:How to retrieve common values (IpAddress, TenantId) in GenericDao? 【发布时间】:2017-01-21 04:00:25 【问题描述】:我们正在使用 Play! HTTP 会话框架。
tenantId
和 ipAddress
是多个表中通用的列。
当用户登录时,我们将tenantId
存储在HttpContextSession
中
每当我们需要用户的 IP 地址时,我们都使用Http.Context.current().request().remoteAddress()
来存储 IP 地址。
我们编写了大量查询,现在我们希望以通用方式保存或查询tenantId
。
所有查询都通过 GenericDao
我们可以在 GenericDao 中使用以下内容来获取租户 ID,以便我们可以附加到所有查询中吗?
Http.Context.session().get("tenantId");
保存或检索这些详细信息的最佳方法是什么?
谢谢。
【问题讨论】:
50
rep 不会为您提供离题/过于宽泛/基于意见的答案,该答案很可能会在赏金到期后立即关闭并可能被删除。
您没有提供 Play Framework 的版本,1.x 和 2.x 明显不同。
2.x版本是当前正在使用的版本
【参考方案1】:
您不希望您的 DAO 必须依赖于表示层的东西,例如 HTTP 会话。我会推荐一个抽象来隐藏这些细节。
创建一个名为 TenantIdProvider 的接口并将其注入您的 DAO。它看起来像这样:
public interface TenantIdProvider
String getTenantId();
然后创建一个名为 HttpSessionTenantIdProvider 的实现。
class HttpSessionTenantIdProvider implements TenantIdProvider
@Override
public String getTenantId()
return Http.Context.session().get("tenantId");
现在您的 GenericDAO 可以引用 TenantIdProvider 并且每个需要tenantId 的查询都可以通过 TenantIdProvider 获取它,并且不依赖于播放框架或您使用的任何其他表示层。
如果您最终拥有运行和发送通知或其他任务的计划作业,并且它们使用此 DAO,这真的很重要。如果这个 DAO 依赖于 HTTP 会话,那将是不可能的。您的工作应用程序可以创建一个 TenantIdProvider,它刚刚返回“系统”或类似的东西。
【讨论】:
以上是关于如何在 GenericDao 中检索常用值(IpAddress、TenantId)?的主要内容,如果未能解决你的问题,请参考以下文章
使用 group by / unique 进行 Genericdao 搜索
Hibernate GenericDAO 用于父/子关系和 DAO/DTO 模式