Liferay Service Builder:无法 运行 动态查询

Liferay Serivce Builder: Not able to run dynamic query

我有两个插件 portlet。首先拥有所有实体的服务构建器。第二个 portlet 正在使用服务的 jar 文件来执行动态查询。

我在我的第二个插件 portlet 中使用第一个服务 jar 来与数据库交互。但是在这个 jar 文件中没有任何 Impl class。这就是为什么我收到错误 Impl Class not found 的原因。 以下供参考:

DynamicQuery dynamicQuery = DynamicQueryFactoryUtil.forClass(XXX.class,
PortletClassLoaderUtil.getClassLoader());
try {
    XXXLocalServiceUtil.dynamicQuery(dynamicQuery);
} catch (SystemException e1) {
  // TODO Auto-generated catch block
  e1.printStackTrace();
}

错误: [DynamicQueryFactoryImpl:96] 无法找到模型 com.compass.model.impl.XXXImpl java.lang.ClassNotFoundException: com.compass.model.impl.XXXImpl

服务构建器的正常功能运行良好

只是不要使用 DynamicQueryFactoryUtil 但要这样使用 XXXLocalServiceUtil

DynamicQuery dynamicQuery = XXXLocalServiceUtil.dynamicQuery() 
try {
    XXXLocalServiceUtil.dynamicQuery(dynamicQuery);
} catch (SystemException e1) {
  // TODO Auto-generated catch block
  e1.printStackTrace();
}

如果你想使用工厂,你必须使用接口模型而不是实体的实现,所以如果你有一个实体 FooImpl 起诉 Foo.class 并使用你服务插件 portlet 的类加载器

Classloader cl =(ClassLoader) PortletBeanLocatorUtil.locate("services-portlet", "portletClassLoader");
DynamicQueryFactoryUtil.forClass(XXX.class, cl);

两者都适合我..

ClassLoader classLoader = (ClassLoader)PortletBeanLocatorUtil.locate(ClpSerializer.getServletContextName(), "portletClassLoader");

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

DynamicQuery dynamicQuery = DynamicQueryFactoryUtil.forClass(charges.class,classLoader);

谢谢@Romeo。

public static void getuserList(){
        DynamicQuery dynamicQuery = XXLocalServiceUtil.dynamicQuery();
        System.out.println("dynamicQuery");
        dynamicQuery.add(PropertyFactoryUtil.forName("field1").eq("field_name"));
        List<XX> userList = XXLocalServiceUtil.dynamicQuery(dynamicQuery);
        System.out.println(userList);
}

这对我有用!!!!