我有一个使用Liferay服务构建器进行持久化的父portlet。子portlet使用相同的实体进行持久化。所以我使用Liferay插件属性将父portlet添加为子portlet中的依赖项。如果我有实体的单个主键,一切都很好。但是在复合主键实体的情况下,如果我找到使用它的实体,则会发生类别转换异常。我无法找到原因。是因为类加载器问题吗?
答案 0 :(得分:1)
服务jar存在于父portlet和子portlet中,在这种情况下我们无法避免。在调试时,即使在子portlet中创建了PK类对象,也会使用父portlet类加载器在父portlet中进行持久化。这就产生了问题。
解决方案是在localserviceImpl中创建一个方法,以便在不使用复合PK的情况下进行持久化或提取。使用单独的PK属性创建。使用属性在localServiceImpl中创建PK,然后选择获取或持久性。
答案 1 :(得分:0)
很可能你的classpath
上可能会有两次这些课程。当您通过liferay-plugin-package.properties
定义相关性时,jars
将位于WEB-INF/lib
中。可能是您在全球jars
classpath
上无意中tomcat/lib/ext
。
答案 2 :(得分: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;
}
}