在liferay动态查询中将Strint强制转换为整数

在liferay动态查询中将Strint强制转换为整数,liferay,liferay-6,dynamicquery,Liferay,Liferay 6,Dynamicquery,我一直在为一个项目使用动态查询 这是我面临的一个问题 对于表xyz,version列存储为varchar(我知道这是一个糟糕的设计,但现在更改太晚了),其值为9,12 对于查询: select max(version) from xyz where something = 'abc'; 我得到的输出是9,而不是12 同一项的动态查询为: ClassLoader classLoader = PortletBeanLocatorUtil.getBeanLocator(ClpSerializer

我一直在为一个项目使用动态查询

这是我面临的一个问题

对于表xyz,
version
列存储为
varchar
(我知道这是一个糟糕的设计,但现在更改太晚了),其值为
9,12

对于查询:

select max(version) 
from xyz 
where something = 'abc';
我得到的输出是9,而不是12

同一项的动态查询为:

ClassLoader classLoader = PortletBeanLocatorUtil.getBeanLocator(ClpSerializer.getServletContextName()).getClassLoader();

DynamicQuery dynamicQuery = DynamicQueryFactoryUtil.forClass(xyz.class, classLoader);
                    dynamicQuery.setProjection(ProjectionFactoryUtil.max("version"));
                    dynamicQuery.add(PropertyFactoryUtil.forName("something").eq("abc"));

List<Object> list = xyzLocalServiceUtil.dynamicQuery(dynamicQuery);
现在,我希望它位于动态查询中,我如何才能做到这一点


我正在使用liferay-6.2-ce

尝试使用ProjectionFactoryUtil.sqlProjection方法。 该方法允许使用SQL引擎执行的函数

例如,我使用以下代码获取名为“content”的字符串列的最大长度:

Projection maxSizeProjection = ProjectionFactoryUtil.sqlProjection(
        "max(length(content)) as maxSize", new String[] {"maxSize"},
        new Type[] {Type.BIG_DECIMAL});
如果要在条件中使用SQL函数,可以使用RestrictionsFactoryUtil.sqlRestriction使用动态查询标准执行相同的操作

在您的情况下,请尝试以下代码:

import com.liferay.portal.kernel.dao.orm.ProjectionFactoryUtil;
import com.liferay.portal.kernel.dao.orm.Type;

...

Projection maxSizeProjection = ProjectionFactoryUtil.sqlProjection(
        "max(cast(version as signed)) as maxVersion",
        new String[] {"maxVersion"}, new Type[] {Type.BIG_DECIMAL});

dynamicQuery.setProjection(maxSizeProjection);

这对我来说非常好:)非常感谢:)
import com.liferay.portal.kernel.dao.orm.ProjectionFactoryUtil;
import com.liferay.portal.kernel.dao.orm.Type;

...

Projection maxSizeProjection = ProjectionFactoryUtil.sqlProjection(
        "max(cast(version as signed)) as maxVersion",
        new String[] {"maxVersion"}, new Type[] {Type.BIG_DECIMAL});

dynamicQuery.setProjection(maxSizeProjection);