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);
}
这对我有用!!!!
我有两个插件 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);
}
这对我有用!!!!