1

我有一个使用 Liferay 服务构建器进行持久性的父 portlet。子 Portlet 使用相同的实体进行持久性。因此,我使用 Liferay 插件属性将父 portlet 作为依赖项添加到子 portlet 中。如果我有实体的单个主键,一切都很好。但是在复合主键实体的情况下,如果我找到使用它的实体,则会发生类转换异常。我找不到原因。是因为类加载器问题吗?

4

3 回答 3

2

服务 jar 存在于父 portlet 和子 portlet 中,在这种情况下我们无法避免。在调试时,即使 PK 类对象是在子 portlet 中创建的,持久性仍然发生在使用父 portlet 类加载器的父 portlet 中。这就产生了问题。

解决方案是在 localserviceImpl 中创建一个方法用于持久化或获取,而不使用复合 PK。使用单独的 PK 属性创建。使用属性在 localServiceImpl 中创建 PK 并进行获取或持久化。

于 2016-04-23T16:15:16.070 回答
0

我遵循了 San 的建议,没关系:

public class [ENTITY_NAME]LocalServiceImpl extends [ENTITY_NAME]LocalServiceBaseImpl {
    /*
     * NOTE FOR DEVELOPERS:
     *
     * Never reference this interface directly. Always use {@link [ENTITY_NAME]LocalServiceUtil} to access the [ENTITY_NAME] local service.
     */

/* (non-Javadoc)
 * @see [ENTITY_NAME]LocalService#createEntity(java.lang.String, java.util.Date)
 */
    public [ENTITY_NAME] createEntityName(String user, java.util.Date fecha) {
        [ENTITY_NAME]PK entityNamePK = new EntityNamePK();
        [ENTITY_NAME] entityName;
        entityNamePK.setUser(user);
        entityNamePK.setDate(fecha);
        entityName = createEntityName(entityNamePK);
        return entityName;
    }
}
于 2018-07-10T10:18:52.523 回答
0

很可能您的classpath. 当您通过 定义依赖项时liferay-plugin-package.propertiesjars将在WEB-INF/lib. 可能你jars在全球也有同样的不经意classpath tomcat/lib/ext

于 2016-04-21T08:21:29.343 回答