J'ai utilisé la requête dynamique pour un projet.Casting Strint à nombre entier dans la requête dynamique liferay
Voici un scénario pour lequel je suis confronté à un problème.
Pour une table xyz la colonne version
est stockée sous forme varchar
(je sais que c'est une mauvaise conception, mais il est trop tard pour changer maintenant) et a des valeurs comme 9,12
.
Pour la requête:
select max(version)
from xyz
where something = 'abc';
Je reçois la sortie comme 9 au lieu de 12.
La requête dynamique est la même:
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);
La requête qui donne la valeur correcte est:
select max(cast(version as signed))
from xyz
where something = 'abc';
Maintenant, je veux que ce soit dans la requête dynamique, comment puis-je faire cela?
J'utilise la méthode Liferay-6.2-ce
Cela a fonctionné tout à fait bien pour moi :) Merci beaucoup :) –