hibernate - 使用动态查询从 3 个表中获取数据

标签 hibernate liferay liferay-6 dynamicquery

我有 3 个表 user_、userTracker、userTrackerPath

user_ 的 userId 作为 Pk。这是 userTracker 中的 Fk userTracker 的 UserTrackerId 为 pk,它是 userTrackerPath 中的 Fk userTrackerPath 的 userTrackerPathId 为 Pk。

user_ 表有字段 firstName, LastName, loginIp, lastLoginIp userTracker 有字段 remoteAddr、remoteHost userTrackerPath 有字段 path_, pathDate

这些都是我想要的文件。

我已经编写了一个 sql 查询,它为我成功运行,但我想要使用动态查询的结果。

这是我的 sql 查询。

select concat(U.firstName," ",U.lastName) as     FullName,U.loginIp,U.lastLoginIp,UT.remoteAddr,substring(UT.modifiedDate,1,10) as Date,UTP.path_ from demo.User_ U, demo.UserTracker UT, demo.UserTrackerPath UTP where ((U.userId=UT.userId) and (UT.userTrackerId=UTP.userTrackerId));

我写了带有预测的动态查询,我很困惑如何加入它们。

//Dynamic Query For User Class

        DynamicQuery dynamicQuery_user = DynamicQueryFactoryUtil.forClass(User.class,PortalClassLoaderUtil.getClassLoader())
                .setProjection(ProjectionFactoryUtil.property("userId"))
                .setProjection(ProjectionFactoryUtil.property("firstName"))
                .setProjection(ProjectionFactoryUtil.property("lastName"))
                .setProjection(ProjectionFactoryUtil.property("loginIp"))
                .setProjection(ProjectionFactoryUtil.property("lastLoginIp"));

        //Dynamic Query For User and UserTracker Class

        DynamicQuery dynamicQuery_userTracker  = DynamicQueryFactoryUtil.forClass(UserTracker.class,PortalClassLoaderUtil.getClassLoader())
                .setProjection(ProjectionFactoryUtil.property("modifiedDate"))
                .setProjection(ProjectionFactoryUtil.property("remoteAddr"));


        //Dynamic Query for UserTracker and UserTrackerPath

        DynamicQuery dynamicQuery_userTrackerPath  = DynamicQueryFactoryUtil.forClass(UserTrackerPath.class,PortalClassLoaderUtil.getClassLoader())
                .setProjection(ProjectionFactoryUtil.property("path_"))
                .setProjection(ProjectionFactoryUtil.property("pathDate"));

我也试过了..

        dynamicQuery_userTracker.add(PropertyFactoryUtil.forName("userId").in(dynamicQuery_user));

        dynamicQuery_userTrackerPath.add(PropertyFactoryUtil.forName("userTrackerId").in(dynamicQuery_userTracker));

我知道我的方法不对。任何意见或建议。

谢谢。

最佳答案

杰我想你cannot do joins使用动态查询 API。你可以做 subqueries使用 in 和 notin 方法。

关于hibernate - 使用动态查询从 3 个表中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14827082/

相关文章:

liferay - 记录 Liferay 登录尝试

java - hibernate的lazy init一点也不懒!

java - 找不到 int 类型的属性时间戳!走过的路径 : ScoreCard. 分数

export - 在Liferay中导出和导入的步骤

performance - JBoss 上 Liferay Portal 的要求

java - 如何借助 liferay 注册 portlet 创建用户注册

java - tomcat 服务器中的两个不同的 liferay 非根上下文

java - 为什么@JoinColumn在父端但生成的列在子端?

java - Hibernate 在同一事务中新创建的记录上的 save() 之后调用 get()

templates - 找不到指定主题 id 的主题。返回默认主题