5

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

我在我的第二个插件 portlet 中使用第一个服务 jar 来与数据库交互。但是在这个 jar 文件中没有任何 Impl 类。这就是为什么我收到错误 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

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

4

3 回答 3

6

只是不要以这种方式使用DynamicQueryFactoryUtil而是 XXXLocalServiceUtil

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

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

Classloader cl =(ClassLoader) PortletBeanLocatorUtil.locate("services-portlet", "portletClassLoader");
DynamicQueryFactoryUtil.forClass(XXX.class, cl);
于 2017-03-28T11:33:03.090 回答
1

两者都对我有用..

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

或者

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

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

谢谢@罗密欧。

于 2017-03-29T04:14:48.463 回答
0
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);
}

这对我有用!!!!

于 2020-11-22T19:26:13.910 回答