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

时间:2013-02-12 06:54:23

标签: hibernate liferay liferay-6 dynamicquery

我有3个表user_,userTracker,userTrackerPath

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

user_ tables包含字段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));

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

感谢。

1 个答案:

答案 0 :(得分:1)

Jay我认为您使用DynamicQuery API cannot do joins。您可以使用in和notin方法执行subqueries