--- /dev/null
+<#if entity.isHierarchicalTree()>\r
+ <#if entity.hasColumn("groupId")>\r
+ <#assign scopeColumn = entity.getColumn("groupId")>\r
+ <#else>\r
+ <#assign scopeColumn = entity.getColumn("companyId")>\r
+ </#if>\r
+\r
+ <#assign pkColumn = entity.getPKList()?first>\r
+</#if>\r
+\r
+package ${packagePath}.service.persistence;\r
+\r
+<#assign noSuchEntity = serviceBuilder.getNoSuchEntityException(entity)>\r
+\r
+import ${packagePath}.${noSuchEntity}Exception;\r
+import ${packagePath}.model.${entity.name};\r
+import ${packagePath}.model.impl.${entity.name}Impl;\r
+import ${packagePath}.model.impl.${entity.name}ModelImpl;\r
+\r
+import com.liferay.portal.NoSuchModelException;\r
+import com.liferay.portal.kernel.bean.BeanReference;\r
+import com.liferay.portal.kernel.cache.CacheRegistryUtil;\r
+import com.liferay.portal.kernel.dao.jdbc.MappingSqlQuery;\r
+import com.liferay.portal.kernel.dao.jdbc.MappingSqlQueryFactoryUtil;\r
+import com.liferay.portal.kernel.dao.jdbc.RowMapper;\r
+import com.liferay.portal.kernel.dao.jdbc.SqlUpdate;\r
+import com.liferay.portal.kernel.dao.jdbc.SqlUpdateFactoryUtil;\r
+import com.liferay.portal.kernel.dao.orm.EntityCacheUtil;\r
+import com.liferay.portal.kernel.dao.orm.FinderCacheUtil;\r
+import com.liferay.portal.kernel.dao.orm.FinderPath;\r
+import com.liferay.portal.kernel.dao.orm.Query;\r
+import com.liferay.portal.kernel.dao.orm.QueryPos;\r
+import com.liferay.portal.kernel.dao.orm.QueryUtil;\r
+import com.liferay.portal.kernel.dao.orm.Session;\r
+import com.liferay.portal.kernel.dao.orm.SQLQuery;\r
+import com.liferay.portal.kernel.exception.SystemException;\r
+import com.liferay.portal.kernel.log.Log;\r
+import com.liferay.portal.kernel.log.LogFactoryUtil;\r
+import com.liferay.portal.kernel.portlet.PortletClassLoaderUtil;\r
+import com.liferay.portal.kernel.sanitizer.Sanitizer;\r
+import com.liferay.portal.kernel.sanitizer.SanitizerException;\r
+import com.liferay.portal.kernel.sanitizer.SanitizerUtil;\r
+import com.liferay.portal.kernel.util.ArrayUtil;\r
+import com.liferay.portal.kernel.util.ContentTypes;\r
+import com.liferay.portal.kernel.util.CalendarUtil;\r
+import com.liferay.portal.kernel.util.GetterUtil;\r
+import com.liferay.portal.kernel.util.InstanceFactory;\r
+import com.liferay.portal.kernel.util.OrderByComparator;\r
+import com.liferay.portal.kernel.util.PropsKeys;\r
+import com.liferay.portal.kernel.util.PropsUtil;\r
+import com.liferay.portal.kernel.util.SetUtil;\r
+import com.liferay.portal.kernel.util.StringBundler;\r
+import com.liferay.portal.kernel.util.StringPool;\r
+import com.liferay.portal.kernel.util.StringUtil;\r
+import com.liferay.portal.kernel.util.Validator;\r
+import com.liferay.portal.kernel.uuid.PortalUUIDUtil;\r
+import com.liferay.portal.model.CacheModel;\r
+import com.liferay.portal.model.ModelListener;\r
+import com.liferay.portal.security.auth.PrincipalThreadLocal;\r
+import com.liferay.portal.security.permission.InlineSQLHelperUtil;\r
+import com.liferay.portal.service.persistence.BatchSessionUtil;\r
+import com.liferay.portal.service.persistence.impl.BasePersistenceImpl;\r
+\r
+import java.io.Serializable;\r
+\r
+import java.sql.ResultSet;\r
+import java.sql.SQLException;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Collections;\r
+import java.util.Date;\r
+import java.util.Iterator;\r
+import java.util.List;\r
+import java.util.Set;\r
+\r
+<#list referenceList as tempEntity>\r
+ <#if tempEntity.hasColumns() && (entity.name == "Counter" || tempEntity.name != "Counter")>\r
+ import ${tempEntity.packagePath}.service.persistence.${tempEntity.name}Persistence;\r
+ </#if>\r
+</#list>\r
+\r
+/**\r
+ * The persistence implementation for the ${entity.humanName} service.\r
+ *\r
+ * <p>\r
+ * Caching information and settings can be found in <code>portal.properties</code>\r
+ * </p>\r
+ *\r
+ * @author ${author}\r
+ * @see ${entity.name}Persistence\r
+ * @see ${entity.name}Util\r
+ * @generated\r
+ */\r
+public class ${entity.name}PersistenceImpl extends BasePersistenceImpl<${entity.name}> implements ${entity.name}Persistence {\r
+\r
+ /*\r
+ * NOTE FOR DEVELOPERS:\r
+ *\r
+ * Never modify or reference this class directly. Always use {@link ${entity.name}Util} to access the ${entity.humanName} persistence. Modify <code>service.xml</code> and rerun ServiceBuilder to regenerate this class.\r
+ */\r
+\r
+ public static final String FINDER_CLASS_NAME_ENTITY = ${entity.name}Impl.class.getName();\r
+\r
+ public static final String FINDER_CLASS_NAME_LIST_WITH_PAGINATION = FINDER_CLASS_NAME_ENTITY + ".List1";\r
+\r
+ public static final String FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION = FINDER_CLASS_NAME_ENTITY + ".List2";\r
+\r
+ <#assign columnBitmaskEnabled = (entity.finderColumnsList?size > 0) && (entity.finderColumnsList?size < 64)>\r
+\r
+ <#list entity.getFinderList() as finder>\r
+ <#assign finderColsList = finder.getColumns()>\r
+\r
+ <#if finder.isCollection()>\r
+ public static final FinderPath FINDER_PATH_WITH_PAGINATION_FIND_BY_${finder.name?upper_case} = new FinderPath(\r
+ ${entity.name}ModelImpl.ENTITY_CACHE_ENABLED,\r
+ ${entity.name}ModelImpl.FINDER_CACHE_ENABLED,\r
+ ${entity.name}Impl.class,\r
+ FINDER_CLASS_NAME_LIST_WITH_PAGINATION,\r
+ "findBy${finder.name}",\r
+ new String[] {\r
+ <#list finderColsList as finderCol>\r
+ ${serviceBuilder.getPrimitiveObj("${finderCol.type}")}.class.getName(),\r
+ </#list>\r
+\r
+ "java.lang.Integer", "java.lang.Integer", "com.liferay.portal.kernel.util.OrderByComparator"\r
+ });\r
+\r
+ <#if !finder.hasCustomComparator()>\r
+ public static final FinderPath FINDER_PATH_WITHOUT_PAGINATION_FIND_BY_${finder.name?upper_case} = new FinderPath(\r
+ ${entity.name}ModelImpl.ENTITY_CACHE_ENABLED,\r
+ ${entity.name}ModelImpl.FINDER_CACHE_ENABLED,\r
+ ${entity.name}Impl.class,\r
+ FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION,\r
+ "findBy${finder.name}",\r
+ new String[] {\r
+ <#list finderColsList as finderCol>\r
+ ${serviceBuilder.getPrimitiveObj("${finderCol.type}")}.class.getName()\r
+\r
+ <#if finderCol_has_next>\r
+ ,\r
+ </#if>\r
+ </#list>\r
+ }\r
+\r
+ <#if columnBitmaskEnabled>\r
+ ,\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${entity.name}ModelImpl.${finderCol.name?upper_case}_COLUMN_BITMASK\r
+\r
+ <#if finderCol_has_next>\r
+ |\r
+ </#if>\r
+ </#list>\r
+ </#if>\r
+\r
+ );\r
+ </#if>\r
+ <#else>\r
+ public static final FinderPath FINDER_PATH_FETCH_BY_${finder.name?upper_case} = new FinderPath(\r
+ ${entity.name}ModelImpl.ENTITY_CACHE_ENABLED,\r
+ ${entity.name}ModelImpl.FINDER_CACHE_ENABLED,\r
+ ${entity.name}Impl.class,\r
+ FINDER_CLASS_NAME_ENTITY,\r
+ "fetchBy${finder.name}",\r
+ new String[] {\r
+ <#list finderColsList as finderCol>\r
+ ${serviceBuilder.getPrimitiveObj("${finderCol.type}")}.class.getName()\r
+\r
+ <#if finderCol_has_next>\r
+ ,\r
+ </#if>\r
+ </#list>\r
+ }\r
+\r
+ <#if columnBitmaskEnabled>\r
+ ,\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${entity.name}ModelImpl.${finderCol.name?upper_case}_COLUMN_BITMASK\r
+\r
+ <#if finderCol_has_next>\r
+ |\r
+ </#if>\r
+ </#list>\r
+ </#if>\r
+\r
+ );\r
+ </#if>\r
+\r
+ <#if !finder.hasCustomComparator()>\r
+ public static final FinderPath FINDER_PATH_COUNT_BY_${finder.name?upper_case} = new FinderPath(\r
+ ${entity.name}ModelImpl.ENTITY_CACHE_ENABLED,\r
+ ${entity.name}ModelImpl.FINDER_CACHE_ENABLED,\r
+ Long.class,\r
+ FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION,\r
+ "countBy${finder.name}",\r
+ new String[] {\r
+ <#list finderColsList as finderCol>\r
+ ${serviceBuilder.getPrimitiveObj("${finderCol.type}")}.class.getName()\r
+\r
+ <#if finderCol_has_next>\r
+ ,\r
+ </#if>\r
+ </#list>\r
+ });\r
+ </#if>\r
+\r
+ <#if finder.hasArrayableOperator() || finder.hasCustomComparator()>\r
+ public static final FinderPath FINDER_PATH_WITH_PAGINATION_COUNT_BY_${finder.name?upper_case} = new FinderPath(\r
+ ${entity.name}ModelImpl.ENTITY_CACHE_ENABLED,\r
+ ${entity.name}ModelImpl.FINDER_CACHE_ENABLED,\r
+ Long.class,\r
+ FINDER_CLASS_NAME_LIST_WITH_PAGINATION,\r
+ "countBy${finder.name}",\r
+ new String[] {\r
+ <#list finderColsList as finderCol>\r
+ ${serviceBuilder.getPrimitiveObj("${finderCol.type}")}.class.getName()\r
+\r
+ <#if finderCol_has_next>\r
+ ,\r
+ </#if>\r
+ </#list>\r
+ });\r
+ </#if>\r
+ </#list>\r
+\r
+ public static final FinderPath FINDER_PATH_WITH_PAGINATION_FIND_ALL = new FinderPath(\r
+ ${entity.name}ModelImpl.ENTITY_CACHE_ENABLED,\r
+ ${entity.name}ModelImpl.FINDER_CACHE_ENABLED,\r
+ ${entity.name}Impl.class,\r
+ FINDER_CLASS_NAME_LIST_WITH_PAGINATION,\r
+ "findAll",\r
+ new String[0]);\r
+\r
+ public static final FinderPath FINDER_PATH_WITHOUT_PAGINATION_FIND_ALL = new FinderPath(\r
+ ${entity.name}ModelImpl.ENTITY_CACHE_ENABLED,\r
+ ${entity.name}ModelImpl.FINDER_CACHE_ENABLED,\r
+ ${entity.name}Impl.class,\r
+ FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION,\r
+ "findAll",\r
+ new String[0]);\r
+\r
+ public static final FinderPath FINDER_PATH_COUNT_ALL = new FinderPath(\r
+ ${entity.name}ModelImpl.ENTITY_CACHE_ENABLED,\r
+ ${entity.name}ModelImpl.FINDER_CACHE_ENABLED,\r
+ Long.class,\r
+ FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION,\r
+ "countAll",\r
+ new String[0]);\r
+\r
+ /**\r
+ * Caches the ${entity.humanName} in the entity cache if it is enabled.\r
+ *\r
+ * @param ${entity.varName} the ${entity.humanName}\r
+ */\r
+ public void cacheResult(${entity.name} ${entity.varName}) {\r
+ EntityCacheUtil.putResult(${entity.name}ModelImpl.ENTITY_CACHE_ENABLED, ${entity.name}Impl.class, ${entity.varName}.getPrimaryKey(), ${entity.varName});\r
+\r
+ <#list entity.getUniqueFinderList() as finder>\r
+ <#assign finderColsList = finder.getColumns()>\r
+\r
+ FinderCacheUtil.putResult(\r
+ FINDER_PATH_FETCH_BY_${finder.name?upper_case},\r
+ new Object[] {\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.isPrimitiveType()>\r
+ ${serviceBuilder.getPrimitiveObj("${finderCol.type}")}.valueOf(\r
+ </#if>\r
+\r
+ ${entity.varName}.get${finderCol.methodName}()\r
+\r
+ <#if finderCol.isPrimitiveType()>\r
+ )\r
+ </#if>\r
+\r
+ <#if finderCol_has_next>\r
+ ,\r
+ </#if>\r
+ </#list>\r
+ },\r
+ ${entity.varName});\r
+ </#list>\r
+\r
+ ${entity.varName}.resetOriginalValues();\r
+ }\r
+\r
+ /**\r
+ * Caches the ${entity.humanNames} in the entity cache if it is enabled.\r
+ *\r
+ * @param ${entity.varNames} the ${entity.humanNames}\r
+ */\r
+ public void cacheResult(List<${entity.name}> ${entity.varNames}) {\r
+ for (${entity.name} ${entity.varName} : ${entity.varNames}) {\r
+ if (EntityCacheUtil.getResult(${entity.name}ModelImpl.ENTITY_CACHE_ENABLED, ${entity.name}Impl.class, ${entity.varName}.getPrimaryKey()) == null) {\r
+ cacheResult(${entity.varName});\r
+ }\r
+ else {\r
+ ${entity.varName}.resetOriginalValues();\r
+ }\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Clears the cache for all ${entity.humanNames}.\r
+ *\r
+ * <p>\r
+ * The {@link com.liferay.portal.kernel.dao.orm.EntityCache} and {@link com.liferay.portal.kernel.dao.orm.FinderCache} are both cleared by this method.\r
+ * </p>\r
+ */\r
+ @Override\r
+ public void clearCache() {\r
+ if (_HIBERNATE_CACHE_USE_SECOND_LEVEL_CACHE) {\r
+ CacheRegistryUtil.clear(${entity.name}Impl.class.getName());\r
+ }\r
+\r
+ EntityCacheUtil.clearCache(${entity.name}Impl.class.getName());\r
+\r
+ FinderCacheUtil.clearCache(FINDER_CLASS_NAME_ENTITY);\r
+ FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITH_PAGINATION);\r
+ FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION);\r
+ }\r
+\r
+ /**\r
+ * Clears the cache for the ${entity.humanName}.\r
+ *\r
+ * <p>\r
+ * The {@link com.liferay.portal.kernel.dao.orm.EntityCache} and {@link com.liferay.portal.kernel.dao.orm.FinderCache} are both cleared by this method.\r
+ * </p>\r
+ */\r
+ @Override\r
+ public void clearCache(${entity.name} ${entity.varName}) {\r
+ EntityCacheUtil.removeResult(${entity.name}ModelImpl.ENTITY_CACHE_ENABLED, ${entity.name}Impl.class, ${entity.varName}.getPrimaryKey());\r
+\r
+ FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITH_PAGINATION);\r
+ FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION);\r
+\r
+ <#if entity.getUniqueFinderList()?size > 0>\r
+ clearUniqueFindersCache(${entity.varName});\r
+ </#if>\r
+ }\r
+\r
+ @Override\r
+ public void clearCache(List<${entity.name}> ${entity.varNames}) {\r
+ FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITH_PAGINATION);\r
+ FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION);\r
+\r
+ for (${entity.name} ${entity.varName} : ${entity.varNames}) {\r
+ EntityCacheUtil.removeResult(${entity.name}ModelImpl.ENTITY_CACHE_ENABLED, ${entity.name}Impl.class, ${entity.varName}.getPrimaryKey());\r
+\r
+ <#if entity.getUniqueFinderList()?size > 0>\r
+ clearUniqueFindersCache(${entity.varName});\r
+ </#if>\r
+ }\r
+ }\r
+\r
+ <#if entity.getUniqueFinderList()?size > 0>\r
+ protected void clearUniqueFindersCache(${entity.name} ${entity.varName}) {\r
+ <#list entity.getUniqueFinderList() as finder>\r
+ <#assign finderColsList = finder.getColumns()>\r
+\r
+ FinderCacheUtil.removeResult(\r
+ FINDER_PATH_FETCH_BY_${finder.name?upper_case},\r
+ new Object[] {\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.isPrimitiveType()>\r
+ ${serviceBuilder.getPrimitiveObj("${finderCol.type}")}.valueOf(\r
+ </#if>\r
+\r
+ ${entity.varName}.get${finderCol.methodName}()\r
+\r
+ <#if finderCol.isPrimitiveType()>\r
+ )\r
+ </#if>\r
+\r
+ <#if finderCol_has_next>\r
+ ,\r
+ </#if>\r
+ </#list>\r
+ });\r
+ </#list>\r
+ }\r
+ </#if>\r
+\r
+ /**\r
+ * Creates a new ${entity.humanName} with the primary key. Does not add the ${entity.humanName} to the database.\r
+ *\r
+ * @param ${entity.PKVarName} the primary key for the new ${entity.humanName}\r
+ * @return the new ${entity.humanName}\r
+ */\r
+ public ${entity.name} create(${entity.PKClassName} ${entity.PKVarName}) {\r
+ ${entity.name} ${entity.varName} = new ${entity.name}Impl();\r
+\r
+ ${entity.varName}.setNew(true);\r
+ ${entity.varName}.setPrimaryKey(${entity.PKVarName});\r
+\r
+ <#if entity.hasUuid()>\r
+ String uuid = PortalUUIDUtil.generate();\r
+\r
+ ${entity.varName}.setUuid(uuid);\r
+ </#if>\r
+\r
+ return ${entity.varName};\r
+ }\r
+\r
+ /**\r
+ * Removes the ${entity.humanName} with the primary key from the database. Also notifies the appropriate model listeners.\r
+ *\r
+ * @param ${entity.PKVarName} the primary key of the ${entity.humanName}\r
+ * @return the ${entity.humanName} that was removed\r
+ * @throws ${packagePath}.${noSuchEntity}Exception if a ${entity.humanName} with the primary key could not be found\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public ${entity.name} remove(${entity.PKClassName} ${entity.PKVarName}) throws ${noSuchEntity}Exception, SystemException {\r
+ <#if entity.hasPrimitivePK(false)>\r
+ return remove(${serviceBuilder.getPrimitiveObj("${entity.PKClassName}")}.valueOf(${entity.PKVarName}));\r
+ <#else>\r
+ return remove((Serializable)${entity.PKVarName});\r
+ </#if>\r
+ }\r
+\r
+ /**\r
+ * Removes the ${entity.humanName} with the primary key from the database. Also notifies the appropriate model listeners.\r
+ *\r
+ * @param primaryKey the primary key of the ${entity.humanName}\r
+ * @return the ${entity.humanName} that was removed\r
+ * @throws ${packagePath}.${noSuchEntity}Exception if a ${entity.humanName} with the primary key could not be found\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ @Override\r
+ public ${entity.name} remove(Serializable primaryKey) throws ${noSuchEntity}Exception, SystemException {\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ ${entity.name} ${entity.varName} = (${entity.name})session.get(${entity.name}Impl.class, primaryKey);\r
+\r
+ if (${entity.varName} == null) {\r
+ if (_log.isWarnEnabled()) {\r
+ _log.warn(_NO_SUCH_ENTITY_WITH_PRIMARY_KEY + primaryKey);\r
+ }\r
+\r
+ throw new ${noSuchEntity}Exception(_NO_SUCH_ENTITY_WITH_PRIMARY_KEY + primaryKey);\r
+ }\r
+\r
+ return remove(${entity.varName});\r
+ }\r
+ catch (${noSuchEntity}Exception nsee) {\r
+ throw nsee;\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ closeSession(session);\r
+ }\r
+ }\r
+\r
+ @Override\r
+ protected ${entity.name} removeImpl(${entity.name} ${entity.varName}) throws SystemException {\r
+ ${entity.varName} = toUnwrappedModel(${entity.varName});\r
+\r
+ <#list entity.columnList as column>\r
+ <#if column.isCollection() && column.isMappingManyToMany()>\r
+ <#assign tempEntity = serviceBuilder.getEntity(column.getEJBName())>\r
+\r
+ try {\r
+ clear${tempEntity.names}.clear(${entity.varName}.getPrimaryKey());\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ FinderCacheUtil.clearCache(${entity.name}ModelImpl.MAPPING_TABLE_${stringUtil.upperCase(column.mappingTable)}_NAME);\r
+ }\r
+ </#if>\r
+ </#list>\r
+\r
+ <#if entity.isHierarchicalTree()>\r
+ shrinkTree(${entity.varName});\r
+ </#if>\r
+\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ BatchSessionUtil.delete(session, ${entity.varName});\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ closeSession(session);\r
+ }\r
+\r
+ clearCache(${entity.varName});\r
+\r
+ return ${entity.varName};\r
+ }\r
+\r
+ @Override\r
+ public ${entity.name} updateImpl(${packagePath}.model.${entity.name} ${entity.varName}, boolean merge) throws SystemException {\r
+ ${entity.varName} = toUnwrappedModel(${entity.varName});\r
+\r
+ boolean isNew = ${entity.varName}.isNew();\r
+\r
+ <#assign collectionFinderList = entity.getCollectionFinderList()>\r
+\r
+ <#assign castEntityModelImpl = false>\r
+\r
+ <#if entity.isHierarchicalTree()>\r
+ <#assign castEntityModelImpl = true>\r
+ </#if>\r
+\r
+ <#if collectionFinderList?size != 0>\r
+ <#list collectionFinderList as finder>\r
+ <#if !finder.hasCustomComparator()>\r
+ <#assign castEntityModelImpl = true>\r
+ </#if>\r
+ </#list>\r
+ </#if>\r
+\r
+ <#assign uniqueFinderList = entity.getUniqueFinderList()>\r
+\r
+ <#if uniqueFinderList?size != 0>\r
+ <#assign castEntityModelImpl = true>\r
+ </#if>\r
+\r
+ <#if castEntityModelImpl>\r
+ ${entity.name}ModelImpl ${entity.varName}ModelImpl = (${entity.name}ModelImpl)${entity.varName};\r
+ </#if>\r
+\r
+ <#if entity.hasUuid()>\r
+ if (Validator.isNull(${entity.varName}.getUuid())) {\r
+ String uuid = PortalUUIDUtil.generate();\r
+\r
+ ${entity.varName}.setUuid(uuid);\r
+ }\r
+ </#if>\r
+\r
+ <#if entity.isHierarchicalTree()>\r
+ if (isNew) {\r
+ expandTree(${entity.varName}, null);\r
+ }\r
+ else {\r
+ if (${entity.varName}.getParent${pkColumn.methodName}() != ${entity.varName}ModelImpl.getOriginalParent${pkColumn.methodName}()) {\r
+ List<Long> children${pkColumn.methodNames} = getChildrenTree${pkColumn.methodNames}(${entity.varName});\r
+\r
+ shrinkTree(${entity.varName});\r
+ expandTree(${entity.varName}, children${pkColumn.methodNames});\r
+ }\r
+ }\r
+ </#if>\r
+\r
+ <#assign sanitizeTuples = modelHintsUtil.getSanitizeTuples("${packagePath}.model.${entity.name}")>\r
+\r
+ <#if sanitizeTuples?size != 0>\r
+ long userId = GetterUtil.getLong(PrincipalThreadLocal.getName());\r
+\r
+ if (userId > 0) {\r
+ <#assign companyId = 0>\r
+\r
+ <#if entity.hasColumn("companyId")>\r
+ long companyId = ${entity.varName}.getCompanyId();\r
+ <#else>\r
+ long companyId = 0;\r
+ </#if>\r
+\r
+ <#if entity.hasColumn("groupId")>\r
+ long groupId = ${entity.varName}.getGroupId();\r
+ <#else>\r
+ long groupId = 0;\r
+ </#if>\r
+\r
+ long ${entity.PKVarName} = 0;\r
+\r
+ if (!isNew) {\r
+ ${entity.PKVarName} = ${entity.varName}.getPrimaryKey();\r
+ }\r
+\r
+ try {\r
+ <#list sanitizeTuples as sanitizeTuple>\r
+ <#assign colMethodName = textFormatter.format(sanitizeTuple.getObject(0), 6)>\r
+\r
+ <#assign contentType = "\"" + sanitizeTuple.getObject(1) + "\"">\r
+\r
+ <#if contentType == "\"text/html\"">\r
+ <#assign contentType = "ContentTypes.TEXT_HTML">\r
+ <#elseif contentType == "\"text/plain\"">\r
+ <#assign contentType = "ContentTypes.TEXT_PLAIN">\r
+ </#if>\r
+\r
+ <#assign modes = "\"" + sanitizeTuple.getObject(2) + "\"">\r
+\r
+ <#if modes == "\"ALL\"">\r
+ <#assign modes = "Sanitizer.MODE_ALL">\r
+ <#elseif modes == "\"BAD_WORDS\"">\r
+ <#assign modes = "Sanitizer.MODE_BAD_WORDS">\r
+ <#elseif modes == "\"XSS\"">\r
+ <#assign modes = "Sanitizer.MODE_XSS">\r
+ <#else>\r
+ <#assign modes = "StringUtil.split(\"" + sanitizeTuple.getObject(2) + "\")">\r
+ </#if>\r
+\r
+ ${entity.varName}.set${colMethodName}(SanitizerUtil.sanitize(companyId, groupId, userId, ${packagePath}.model.${entity.name}.class.getName(), ${entity.PKVarName}, ${contentType}, ${modes}, ${entity.varName}.get${colMethodName}(), null));\r
+ </#list>\r
+ }\r
+ catch (SanitizerException se) {\r
+ throw new SystemException(se);\r
+ }\r
+ }\r
+ </#if>\r
+\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ BatchSessionUtil.update(session, ${entity.varName}, merge);\r
+\r
+ ${entity.varName}.setNew(false);\r
+\r
+ <#if entity.hasLazyBlobColumn()>\r
+ session.flush();\r
+ session.clear();\r
+ </#if>\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ closeSession(session);\r
+ }\r
+\r
+ FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITH_PAGINATION);\r
+\r
+ if (isNew\r
+ <#if columnBitmaskEnabled>\r
+ || !${entity.name}ModelImpl.COLUMN_BITMASK_ENABLED\r
+ </#if>\r
+ ) {\r
+\r
+ FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION);\r
+ }\r
+\r
+ <#if collectionFinderList?size != 0>\r
+ <#assign hasEqualComparator = false>\r
+\r
+ <#list collectionFinderList as finder>\r
+ <#assign finderColsList = finder.getColumns()>\r
+\r
+ <#if !finder.hasCustomComparator()>\r
+ <#if !hasEqualComparator>\r
+ <#assign hasEqualComparator = true>\r
+\r
+ else {\r
+ </#if>\r
+\r
+ if (\r
+ <#if columnBitmaskEnabled>\r
+ (${entity.varName}ModelImpl.getColumnBitmask() & FINDER_PATH_WITHOUT_PAGINATION_FIND_BY_${finder.name?upper_case}.getColumnBitmask()) != 0\r
+ <#else>\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.isPrimitiveType()>\r
+ (${entity.varName}.get${finderCol.methodName}() != ${entity.varName}ModelImpl.getOriginal${finderCol.methodName}())\r
+ <#else>\r
+ !Validator.equals(${entity.varName}.get${finderCol.methodName}(), ${entity.varName}ModelImpl.getOriginal${finderCol.methodName}())\r
+ </#if>\r
+\r
+ <#if finderCol_has_next>\r
+ ||\r
+ </#if>\r
+ </#list>\r
+ </#if>\r
+ ) {\r
+\r
+ Object[] args = new Object[] {\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.isPrimitiveType()>\r
+ ${serviceBuilder.getPrimitiveObj("${finderCol.type}")}.valueOf(\r
+ </#if>\r
+\r
+ ${entity.varName}ModelImpl.getOriginal${finderCol.methodName}()\r
+\r
+ <#if finderCol.isPrimitiveType()>\r
+ )\r
+ </#if>\r
+\r
+ <#if finderCol_has_next>\r
+ ,\r
+ </#if>\r
+ </#list>\r
+ };\r
+\r
+ FinderCacheUtil.removeResult(FINDER_PATH_COUNT_BY_${finder.name?upper_case}, args);\r
+ FinderCacheUtil.removeResult(FINDER_PATH_WITHOUT_PAGINATION_FIND_BY_${finder.name?upper_case}, args);\r
+\r
+ args = new Object[] {\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.isPrimitiveType()>\r
+ ${serviceBuilder.getPrimitiveObj("${finderCol.type}")}.valueOf(\r
+ </#if>\r
+\r
+ ${entity.varName}ModelImpl.get${finderCol.methodName}()\r
+\r
+ <#if finderCol.isPrimitiveType()>\r
+ )\r
+ </#if>\r
+\r
+ <#if finderCol_has_next>\r
+ ,\r
+ </#if>\r
+ </#list>\r
+ };\r
+\r
+ FinderCacheUtil.removeResult(FINDER_PATH_COUNT_BY_${finder.name?upper_case}, args);\r
+ FinderCacheUtil.removeResult(FINDER_PATH_WITHOUT_PAGINATION_FIND_BY_${finder.name?upper_case}, args);\r
+ }\r
+ </#if>\r
+ </#list>\r
+\r
+ <#if hasEqualComparator>\r
+ }\r
+ </#if>\r
+ </#if>\r
+\r
+ EntityCacheUtil.putResult(${entity.name}ModelImpl.ENTITY_CACHE_ENABLED, ${entity.name}Impl.class, ${entity.varName}.getPrimaryKey(), ${entity.varName});\r
+\r
+ <#if uniqueFinderList?size > 0>\r
+ if (isNew) {\r
+ <#list uniqueFinderList as finder>\r
+ <#assign finderColsList = finder.getColumns()>\r
+\r
+ FinderCacheUtil.putResult(\r
+ FINDER_PATH_FETCH_BY_${finder.name?upper_case},\r
+ new Object[] {\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.isPrimitiveType()>\r
+ ${serviceBuilder.getPrimitiveObj("${finderCol.type}")}.valueOf(\r
+ </#if>\r
+\r
+ ${entity.varName}.get${finderCol.methodName}()\r
+\r
+ <#if finderCol.isPrimitiveType()>\r
+ )\r
+ </#if>\r
+\r
+ <#if finderCol_has_next>\r
+ ,\r
+ </#if>\r
+ </#list>\r
+ },\r
+ ${entity.varName});\r
+ </#list>\r
+ }\r
+ else {\r
+ <#list uniqueFinderList as finder>\r
+ <#assign finderColsList = finder.getColumns()>\r
+\r
+ if ((${entity.varName}ModelImpl.getColumnBitmask() & FINDER_PATH_FETCH_BY_${finder.name?upper_case}.getColumnBitmask()) != 0) {\r
+ Object[] args = new Object[] {\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.isPrimitiveType()>\r
+ ${serviceBuilder.getPrimitiveObj("${finderCol.type}")}.valueOf(\r
+ </#if>\r
+\r
+ ${entity.varName}ModelImpl.getOriginal${finderCol.methodName}()\r
+\r
+ <#if finderCol.isPrimitiveType()>\r
+ )\r
+ </#if>\r
+\r
+ <#if finderCol_has_next>\r
+ ,\r
+ </#if>\r
+ </#list>\r
+ };\r
+\r
+ <#if !finder.hasCustomComparator()>\r
+ FinderCacheUtil.removeResult(FINDER_PATH_COUNT_BY_${finder.name?upper_case}, args);\r
+ </#if>\r
+\r
+ FinderCacheUtil.removeResult(FINDER_PATH_FETCH_BY_${finder.name?upper_case}, args);\r
+\r
+ FinderCacheUtil.putResult(\r
+ FINDER_PATH_FETCH_BY_${finder.name?upper_case},\r
+ new Object[] {\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.isPrimitiveType()>\r
+ ${serviceBuilder.getPrimitiveObj("${finderCol.type}")}.valueOf(\r
+ </#if>\r
+\r
+ ${entity.varName}.get${finderCol.methodName}()\r
+\r
+ <#if finderCol.isPrimitiveType()>\r
+ )\r
+ </#if>\r
+\r
+ <#if finderCol_has_next>\r
+ ,\r
+ </#if>\r
+ </#list>\r
+ },\r
+ ${entity.varName});\r
+ }\r
+ </#list>\r
+ }\r
+ </#if>\r
+\r
+ <#if entity.hasLazyBlobColumn()>\r
+ ${entity.varName}.resetOriginalValues();\r
+ </#if>\r
+\r
+ return ${entity.varName};\r
+ }\r
+\r
+ protected ${entity.name} toUnwrappedModel(${entity.name} ${entity.varName}) {\r
+ if (${entity.varName} instanceof ${entity.name}Impl) {\r
+ return ${entity.varName};\r
+ }\r
+\r
+ ${entity.name}Impl ${entity.varName}Impl = new ${entity.name}Impl();\r
+\r
+ ${entity.varName}Impl.setNew(${entity.varName}.isNew());\r
+ ${entity.varName}Impl.setPrimaryKey(${entity.varName}.getPrimaryKey());\r
+\r
+ <#list entity.regularColList as column>\r
+ ${entity.varName}Impl.set${column.methodName}(\r
+\r
+ <#if column.type == "boolean">\r
+ ${entity.varName}.is${column.methodName}()\r
+ <#else>\r
+ ${entity.varName}.get${column.methodName}()\r
+ </#if>\r
+\r
+ );\r
+ </#list>\r
+\r
+ return ${entity.varName}Impl;\r
+ }\r
+\r
+ /**\r
+ * Returns the ${entity.humanName} with the primary key or throws a {@link com.liferay.portal.NoSuchModelException} if it could not be found.\r
+ *\r
+ * @param primaryKey the primary key of the ${entity.humanName}\r
+ * @return the ${entity.humanName}\r
+ * @throws com.liferay.portal.NoSuchModelException if a ${entity.humanName} with the primary key could not be found\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ @Override\r
+ public ${entity.name} findByPrimaryKey(Serializable primaryKey) throws NoSuchModelException, SystemException {\r
+ <#if entity.hasPrimitivePK(false)>\r
+ return findByPrimaryKey(((${serviceBuilder.getPrimitiveObj("${entity.PKClassName}")})primaryKey).${entity.PKClassName}Value());\r
+ <#else>\r
+ return findByPrimaryKey((${entity.PKClassName})primaryKey);\r
+ </#if>\r
+ }\r
+\r
+ /**\r
+ * Returns the ${entity.humanName} with the primary key or throws a {@link ${packagePath}.${noSuchEntity}Exception} if it could not be found.\r
+ *\r
+ * @param ${entity.PKVarName} the primary key of the ${entity.humanName}\r
+ * @return the ${entity.humanName}\r
+ * @throws ${packagePath}.${noSuchEntity}Exception if a ${entity.humanName} with the primary key could not be found\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public ${entity.name} findByPrimaryKey(${entity.PKClassName} ${entity.PKVarName}) throws ${noSuchEntity}Exception, SystemException {\r
+ ${entity.name} ${entity.varName} = fetchByPrimaryKey(${entity.PKVarName});\r
+\r
+ if (${entity.varName} == null) {\r
+ if (_log.isWarnEnabled()) {\r
+ _log.warn(_NO_SUCH_ENTITY_WITH_PRIMARY_KEY + ${entity.PKVarName});\r
+ }\r
+\r
+ throw new ${noSuchEntity}Exception(_NO_SUCH_ENTITY_WITH_PRIMARY_KEY + ${entity.PKVarName});\r
+ }\r
+\r
+ return ${entity.varName};\r
+ }\r
+\r
+ /**\r
+ * Returns the ${entity.humanName} with the primary key or returns <code>null</code> if it could not be found.\r
+ *\r
+ * @param primaryKey the primary key of the ${entity.humanName}\r
+ * @return the ${entity.humanName}, or <code>null</code> if a ${entity.humanName} with the primary key could not be found\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ @Override\r
+ public ${entity.name} fetchByPrimaryKey(Serializable primaryKey) throws SystemException {\r
+ <#if entity.hasPrimitivePK(false)>\r
+ return fetchByPrimaryKey(((${serviceBuilder.getPrimitiveObj("${entity.PKClassName}")})primaryKey).${entity.PKClassName}Value());\r
+ <#else>\r
+ return fetchByPrimaryKey((${entity.PKClassName})primaryKey);\r
+ </#if>\r
+ }\r
+\r
+ /**\r
+ * Returns the ${entity.humanName} with the primary key or returns <code>null</code> if it could not be found.\r
+ *\r
+ * @param ${entity.PKVarName} the primary key of the ${entity.humanName}\r
+ * @return the ${entity.humanName}, or <code>null</code> if a ${entity.humanName} with the primary key could not be found\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public ${entity.name} fetchByPrimaryKey(${entity.PKClassName} ${entity.PKVarName}) throws SystemException {\r
+ ${entity.name} ${entity.varName} = (${entity.name})EntityCacheUtil.getResult(${entity.name}ModelImpl.ENTITY_CACHE_ENABLED, ${entity.name}Impl.class, ${entity.PKVarName});\r
+\r
+ if (${entity.varName} == _null${entity.name}) {\r
+ return null;\r
+ }\r
+\r
+ if (${entity.varName} == null) {\r
+ Session session = null;\r
+\r
+ boolean hasException = false;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ ${entity.varName} = (${entity.name})session.get(${entity.name}Impl.class,\r
+\r
+ <#if entity.hasPrimitivePK()>\r
+ ${serviceBuilder.getPrimitiveObj("${entity.PKClassName}")}.valueOf(\r
+ </#if>\r
+\r
+ ${entity.PKVarName}\r
+\r
+ <#if entity.hasPrimitivePK()>\r
+ )\r
+ </#if>\r
+\r
+ );\r
+ }\r
+ catch (Exception e) {\r
+ hasException = true;\r
+\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ if (${entity.varName} != null) {\r
+ cacheResult(${entity.varName});\r
+ }\r
+ else if (!hasException) {\r
+ EntityCacheUtil.putResult(${entity.name}ModelImpl.ENTITY_CACHE_ENABLED, ${entity.name}Impl.class, ${entity.PKVarName}, _null${entity.name});\r
+ }\r
+\r
+ closeSession(session);\r
+ }\r
+ }\r
+\r
+ return ${entity.varName};\r
+ }\r
+\r
+ <#list entity.getFinderList() as finder>\r
+ <#assign finderColsList = finder.getColumns()>\r
+\r
+ <#if finder.isCollection()>\r
+ /**\r
+ * Returns all the ${entity.humanNames} where ${finder.getHumanConditions(false)}.\r
+ *\r
+ <#list finderColsList as finderCol>\r
+ * @param ${finderCol.name} the ${finderCol.humanName}\r
+ </#list>\r
+ * @return the matching ${entity.humanNames}\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public List<${entity.name}> findBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.type} ${finderCol.name}\r
+\r
+ <#if finderCol_has_next>\r
+ ,\r
+ </#if>\r
+ </#list>\r
+\r
+ ) throws SystemException {\r
+ return findBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.name},\r
+ </#list>\r
+\r
+ QueryUtil.ALL_POS, QueryUtil.ALL_POS, null);\r
+ }\r
+\r
+ /**\r
+ * Returns a range of all the ${entity.humanNames} where ${finder.getHumanConditions(false)}.\r
+ *\r
+ * <p>\r
+ * <#include "range_comment.ftl">\r
+ * </p>\r
+ *\r
+ <#list finderColsList as finderCol>\r
+ * @param ${finderCol.name} the ${finderCol.humanName}\r
+ </#list>\r
+ * @param start the lower bound of the range of ${entity.humanNames}\r
+ * @param end the upper bound of the range of ${entity.humanNames} (not inclusive)\r
+ * @return the range of matching ${entity.humanNames}\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public List<${entity.name}> findBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.type} ${finderCol.name},\r
+ </#list>\r
+\r
+ int start, int end) throws SystemException {\r
+ return findBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.name},\r
+ </#list>\r
+\r
+ start, end, null);\r
+ }\r
+\r
+ /**\r
+ * Returns an ordered range of all the ${entity.humanNames} where ${finder.getHumanConditions(false)}.\r
+ *\r
+ * <p>\r
+ * <#include "range_comment.ftl">\r
+ * </p>\r
+ *\r
+ <#list finderColsList as finderCol>\r
+ * @param ${finderCol.name} the ${finderCol.humanName}\r
+ </#list>\r
+ * @param start the lower bound of the range of ${entity.humanNames}\r
+ * @param end the upper bound of the range of ${entity.humanNames} (not inclusive)\r
+ * @param orderByComparator the comparator to order the results by (optionally <code>null</code>)\r
+ * @return the ordered range of matching ${entity.humanNames}\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public List<${entity.name}> findBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.type} ${finderCol.name},\r
+ </#list>\r
+\r
+ int start, int end, OrderByComparator orderByComparator) throws SystemException {\r
+ FinderPath finderPath = null;\r
+ Object[] finderArgs = null;\r
+\r
+ <#if !finder.hasCustomComparator()>\r
+ if ((start == QueryUtil.ALL_POS) && (end == QueryUtil.ALL_POS) && (orderByComparator == null)) {\r
+ finderPath = FINDER_PATH_WITHOUT_PAGINATION_FIND_BY_${finder.name?upper_case};\r
+ finderArgs = new Object[] {\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.name}\r
+\r
+ <#if finderCol_has_next>\r
+ ,\r
+ </#if>\r
+ </#list>\r
+ };\r
+ }\r
+ else {\r
+ </#if>\r
+\r
+ finderPath = FINDER_PATH_WITH_PAGINATION_FIND_BY_${finder.name?upper_case};\r
+ finderArgs = new Object[] {\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.name},\r
+ </#list>\r
+\r
+ start, end, orderByComparator\r
+ };\r
+\r
+ <#if !finder.hasCustomComparator()>\r
+ }\r
+ </#if>\r
+\r
+ List<${entity.name}> list = (List<${entity.name}>)FinderCacheUtil.getResult(finderPath, finderArgs, this);\r
+\r
+ if ((list != null) && !list.isEmpty()) {\r
+ for (${entity.name} ${entity.varName} : list) {\r
+ if (\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.isPrimitiveType(false)>\r
+ (${finderCol.name} != ${entity.varName}.get${finderCol.methodName}())\r
+ <#else>\r
+ !Validator.equals(${finderCol.name}, ${entity.varName}.get${finderCol.methodName}())\r
+ </#if>\r
+\r
+ <#if finderCol_has_next>\r
+ ||\r
+ </#if>\r
+ </#list>\r
+ ) {\r
+ list = null;\r
+\r
+ break;\r
+ }\r
+ }\r
+ }\r
+\r
+ if (list == null) {\r
+ <#include "persistence_impl_find_by_query.ftl">\r
+\r
+ String sql = query.toString();\r
+\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ Query q = session.createQuery(sql);\r
+\r
+ QueryPos qPos = QueryPos.getInstance(q);\r
+\r
+ <#include "persistence_impl_finder_qpos.ftl">\r
+\r
+ list = (List<${entity.name}>)QueryUtil.list(q, getDialect(), start, end);\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ if (list == null) {\r
+ FinderCacheUtil.removeResult(finderPath, finderArgs);\r
+ }\r
+ else {\r
+ cacheResult(list);\r
+\r
+ FinderCacheUtil.putResult(finderPath, finderArgs, list);\r
+ }\r
+\r
+ closeSession(session);\r
+ }\r
+ }\r
+\r
+ return list;\r
+ }\r
+\r
+ /**\r
+ * Returns the first ${entity.humanName} in the ordered set where ${finder.getHumanConditions(false)}.\r
+ *\r
+ <#list finderColsList as finderCol>\r
+ * @param ${finderCol.name} the ${finderCol.humanName}\r
+ </#list>\r
+ * @param orderByComparator the comparator to order the set by (optionally <code>null</code>)\r
+ * @return the first matching ${entity.humanName}\r
+ * @throws ${packagePath}.${noSuchEntity}Exception if a matching ${entity.humanName} could not be found\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public ${entity.name} findBy${finder.name}_First(\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.type} ${finderCol.name},\r
+ </#list>\r
+\r
+ OrderByComparator orderByComparator) throws ${noSuchEntity}Exception, SystemException {\r
+ ${entity.name} ${entity.varName} = fetchBy${finder.name}_First(\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.name},\r
+ </#list>\r
+\r
+ orderByComparator);\r
+\r
+ if (${entity.varName} != null) {\r
+ return ${entity.varName};\r
+ }\r
+\r
+ StringBundler msg = new StringBundler(${(finderColsList?size * 2) + 2});\r
+\r
+ msg.append(_NO_SUCH_ENTITY_WITH_KEY);\r
+\r
+ <#list finderColsList as finderCol>\r
+ msg.append("<#if finderCol_index != 0>, </#if>${finderCol.name}=");\r
+ msg.append(${finderCol.name});\r
+\r
+ <#if !finderCol_has_next>\r
+ msg.append(StringPool.CLOSE_CURLY_BRACE);\r
+ </#if>\r
+ </#list>\r
+\r
+ throw new ${noSuchEntity}Exception(msg.toString());\r
+ }\r
+\r
+ /**\r
+ * Returns the first ${entity.humanName} in the ordered set where ${finder.getHumanConditions(false)}.\r
+ *\r
+ <#list finderColsList as finderCol>\r
+ * @param ${finderCol.name} the ${finderCol.humanName}\r
+ </#list>\r
+ * @param orderByComparator the comparator to order the set by (optionally <code>null</code>)\r
+ * @return the first matching ${entity.humanName}, or <code>null</code> if a matching ${entity.humanName} could not be found\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public ${entity.name} fetchBy${finder.name}_First(\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.type} ${finderCol.name},\r
+ </#list>\r
+\r
+ OrderByComparator orderByComparator) throws SystemException {\r
+ List<${entity.name}> list = findBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.name},\r
+ </#list>\r
+\r
+ 0, 1, orderByComparator);\r
+\r
+ if (!list.isEmpty()) {\r
+ return list.get(0);\r
+ }\r
+\r
+ return null;\r
+ }\r
+\r
+ /**\r
+ * Returns the last ${entity.humanName} in the ordered set where ${finder.getHumanConditions(false)}.\r
+ *\r
+ <#list finderColsList as finderCol>\r
+ * @param ${finderCol.name} the ${finderCol.humanName}\r
+ </#list>\r
+ * @param orderByComparator the comparator to order the set by (optionally <code>null</code>)\r
+ * @return the last matching ${entity.humanName}\r
+ * @throws ${packagePath}.${noSuchEntity}Exception if a matching ${entity.humanName} could not be found\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public ${entity.name} findBy${finder.name}_Last(\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.type} ${finderCol.name},\r
+ </#list>\r
+\r
+ OrderByComparator orderByComparator) throws ${noSuchEntity}Exception, SystemException {\r
+ ${entity.name} ${entity.varName} = fetchBy${finder.name}_Last(\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.name},\r
+ </#list>\r
+\r
+ orderByComparator);\r
+\r
+ if (${entity.varName} != null) {\r
+ return ${entity.varName};\r
+ }\r
+\r
+ StringBundler msg = new StringBundler(${(finderColsList?size * 2) + 2});\r
+\r
+ msg.append(_NO_SUCH_ENTITY_WITH_KEY);\r
+\r
+ <#list finderColsList as finderCol>\r
+ msg.append("<#if finderCol_index != 0>, </#if>${finderCol.name}=");\r
+ msg.append(${finderCol.name});\r
+\r
+ <#if !finderCol_has_next>\r
+ msg.append(StringPool.CLOSE_CURLY_BRACE);\r
+ </#if>\r
+ </#list>\r
+\r
+ throw new ${noSuchEntity}Exception(msg.toString());\r
+ }\r
+\r
+ /**\r
+ * Returns the last ${entity.humanName} in the ordered set where ${finder.getHumanConditions(false)}.\r
+ *\r
+ <#list finderColsList as finderCol>\r
+ * @param ${finderCol.name} the ${finderCol.humanName}\r
+ </#list>\r
+ * @param orderByComparator the comparator to order the set by (optionally <code>null</code>)\r
+ * @return the last matching ${entity.humanName}, or <code>null</code> if a matching ${entity.humanName} could not be found\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public ${entity.name} fetchBy${finder.name}_Last(\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.type} ${finderCol.name},\r
+ </#list>\r
+\r
+ OrderByComparator orderByComparator) throws SystemException {\r
+ int count = countBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.name}\r
+\r
+ <#if finderCol_has_next>\r
+ ,\r
+ </#if>\r
+ </#list>\r
+\r
+ );\r
+\r
+ List<${entity.name}> list = findBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.name},\r
+ </#list>\r
+\r
+ count - 1, count, orderByComparator);\r
+\r
+ if (!list.isEmpty()) {\r
+ return list.get(0);\r
+ }\r
+\r
+ return null;\r
+ }\r
+\r
+ /**\r
+ * Returns the ${entity.humanNames} before and after the current ${entity.humanName} in the ordered set where ${finder.getHumanConditions(false)}.\r
+ *\r
+ * @param ${entity.PKVarName} the primary key of the current ${entity.humanName}\r
+ <#list finderColsList as finderCol>\r
+ * @param ${finderCol.name} the ${finderCol.humanName}\r
+ </#list>\r
+ * @param orderByComparator the comparator to order the set by (optionally <code>null</code>)\r
+ * @return the previous, current, and next ${entity.humanName}\r
+ * @throws ${packagePath}.${noSuchEntity}Exception if a ${entity.humanName} with the primary key could not be found\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public ${entity.name}[] findBy${finder.name}_PrevAndNext(${entity.PKClassName} ${entity.PKVarName},\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.type} ${finderCol.name},\r
+ </#list>\r
+\r
+ OrderByComparator orderByComparator) throws ${noSuchEntity}Exception, SystemException {\r
+ ${entity.name} ${entity.varName} = findByPrimaryKey(${entity.PKVarName});\r
+\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ ${entity.name}[] array = new ${entity.name}Impl[3];\r
+\r
+ array[0] =\r
+ getBy${finder.name}_PrevAndNext(\r
+ session, ${entity.varName},\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.name},\r
+ </#list>\r
+\r
+ orderByComparator, true);\r
+\r
+ array[1] = ${entity.varName};\r
+\r
+ array[2] =\r
+ getBy${finder.name}_PrevAndNext(\r
+ session, ${entity.varName},\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.name},\r
+ </#list>\r
+\r
+ orderByComparator, false);\r
+\r
+ return array;\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ closeSession(session);\r
+ }\r
+ }\r
+\r
+ protected ${entity.name} getBy${finder.name}_PrevAndNext(\r
+ Session session, ${entity.name} ${entity.varName},\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.type} ${finderCol.name},\r
+ </#list>\r
+\r
+ OrderByComparator orderByComparator, boolean previous) {\r
+\r
+ <#include "persistence_impl_get_by_prev_and_next_query.ftl">\r
+\r
+ String sql = query.toString();\r
+\r
+ Query q = session.createQuery(sql);\r
+\r
+ q.setFirstResult(0);\r
+ q.setMaxResults(2);\r
+\r
+ QueryPos qPos = QueryPos.getInstance(q);\r
+\r
+ <#include "persistence_impl_finder_qpos.ftl">\r
+\r
+ if (orderByComparator != null) {\r
+ Object[] values = orderByComparator.getOrderByConditionValues(${entity.varName});\r
+\r
+ for (Object value : values) {\r
+ qPos.add(value);\r
+ }\r
+ }\r
+\r
+ List<${entity.name}> list = q.list();\r
+\r
+ if (list.size() == 2) {\r
+ return list.get(1);\r
+ }\r
+ else {\r
+ return null;\r
+ }\r
+ }\r
+\r
+ <#if finder.hasArrayableOperator()>\r
+ /**\r
+ * Returns all the ${entity.humanNames} where ${finder.getHumanConditions(true)}.\r
+ *\r
+ * <p>\r
+ * <#include "range_comment.ftl">\r
+ * </p>\r
+ *\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.hasArrayableOperator()>\r
+ * @param ${finderCol.names} the ${finderCol.humanNames}\r
+ <#else>\r
+ * @param ${finderCol.name} the ${finderCol.humanName}\r
+ </#if>\r
+ </#list>\r
+ * @return the matching ${entity.humanNames}\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public List<${entity.name}> findBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.hasArrayableOperator()>\r
+ ${finderCol.type}[] ${finderCol.names}\r
+ <#else>\r
+ ${finderCol.type} ${finderCol.name}\r
+ </#if>\r
+\r
+ <#if finderCol_has_next>\r
+ ,\r
+ </#if>\r
+ </#list>\r
+\r
+ ) throws SystemException {\r
+ return findBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.hasArrayableOperator()>\r
+ ${finderCol.names},\r
+ <#else>\r
+ ${finderCol.name},\r
+ </#if>\r
+ </#list>\r
+\r
+ QueryUtil.ALL_POS, QueryUtil.ALL_POS, null);\r
+ }\r
+\r
+ /**\r
+ * Returns a range of all the ${entity.humanNames} where ${finder.getHumanConditions(true)}.\r
+ *\r
+ * <p>\r
+ * <#include "range_comment.ftl">\r
+ * </p>\r
+ *\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.hasArrayableOperator()>\r
+ * @param ${finderCol.names} the ${finderCol.humanNames}\r
+ <#else>\r
+ * @param ${finderCol.name} the ${finderCol.humanName}\r
+ </#if>\r
+ </#list>\r
+ * @param start the lower bound of the range of ${entity.humanNames}\r
+ * @param end the upper bound of the range of ${entity.humanNames} (not inclusive)\r
+ * @return the range of matching ${entity.humanNames}\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public List<${entity.name}> findBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.hasArrayableOperator()>\r
+ ${finderCol.type}[] ${finderCol.names},\r
+ <#else>\r
+ ${finderCol.type} ${finderCol.name},\r
+ </#if>\r
+ </#list>\r
+\r
+ int start, int end) throws SystemException {\r
+ return findBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.hasArrayableOperator()>\r
+ ${finderCol.names},\r
+ <#else>\r
+ ${finderCol.name},\r
+ </#if>\r
+ </#list>\r
+\r
+ start, end, null);\r
+ }\r
+\r
+ /**\r
+ * Returns an ordered range of all the ${entity.humanNames} where ${finder.getHumanConditions(true)}.\r
+ *\r
+ * <p>\r
+ * <#include "range_comment.ftl">\r
+ * </p>\r
+ *\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.hasArrayableOperator()>\r
+ * @param ${finderCol.names} the ${finderCol.humanNames}\r
+ <#else>\r
+ * @param ${finderCol.name} the ${finderCol.humanName}\r
+ </#if>\r
+ </#list>\r
+ * @param start the lower bound of the range of ${entity.humanNames}\r
+ * @param end the upper bound of the range of ${entity.humanNames} (not inclusive)\r
+ * @param orderByComparator the comparator to order the results by (optionally <code>null</code>)\r
+ * @return the ordered range of matching ${entity.humanNames}\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public List<${entity.name}> findBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.hasArrayableOperator()>\r
+ ${finderCol.type}[] ${finderCol.names},\r
+ <#else>\r
+ ${finderCol.type} ${finderCol.name},\r
+ </#if>\r
+ </#list>\r
+\r
+ int start, int end, OrderByComparator orderByComparator) throws SystemException {\r
+ FinderPath finderPath = FINDER_PATH_WITH_PAGINATION_FIND_BY_${finder.name?upper_case};\r
+ Object[] finderArgs = null;\r
+\r
+ if ((start == QueryUtil.ALL_POS) && (end == QueryUtil.ALL_POS) && (orderByComparator == null)) {\r
+ finderArgs = new Object[] {\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.hasArrayableOperator()>\r
+ StringUtil.merge(${finderCol.names})\r
+ <#else>\r
+ ${finderCol.name}\r
+ </#if>\r
+\r
+ <#if finderCol_has_next>\r
+ ,\r
+ </#if>\r
+ </#list>\r
+ };\r
+ }\r
+ else {\r
+ finderArgs = new Object[] {\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.hasArrayableOperator()>\r
+ StringUtil.merge(${finderCol.names}),\r
+ <#else>\r
+ ${finderCol.name},\r
+ </#if>\r
+ </#list>\r
+\r
+ start, end, orderByComparator\r
+ };\r
+ }\r
+\r
+ List<${entity.name}> list = (List<${entity.name}>)FinderCacheUtil.getResult(finderPath, finderArgs, this);\r
+\r
+ if ((list != null) && !list.isEmpty()) {\r
+ for (${entity.name} ${entity.varName} : list) {\r
+ if (\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.hasArrayableOperator()>\r
+ !ArrayUtil.contains(${finderCol.names}, ${entity.varName}.get${finderCol.methodName}())\r
+ <#else>\r
+ <#if finderCol.isPrimitiveType(false)>\r
+ (${finderCol.name} != ${entity.varName}.get${finderCol.methodName}())\r
+ <#else>\r
+ !Validator.equals(${finderCol.name}, ${entity.varName}.get${finderCol.methodName}())\r
+ </#if>\r
+ </#if>\r
+\r
+ <#if finderCol_has_next>\r
+ ||\r
+ </#if>\r
+ </#list>\r
+ ) {\r
+ list = null;\r
+\r
+ break;\r
+ }\r
+ }\r
+ }\r
+\r
+ if (list == null) {\r
+ <#include "persistence_impl_find_by_arrayable_query.ftl">\r
+\r
+ String sql = query.toString();\r
+\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ Query q = session.createQuery(sql);\r
+\r
+ QueryPos qPos = QueryPos.getInstance(q);\r
+\r
+ <#include "persistence_impl_finder_arrayable_qpos.ftl">\r
+\r
+ list = (List<${entity.name}>)QueryUtil.list(q, getDialect(), start, end);\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ if (list == null) {\r
+ FinderCacheUtil.removeResult(finderPath, finderArgs);\r
+ }\r
+ else {\r
+ cacheResult(list);\r
+\r
+ FinderCacheUtil.putResult(finderPath, finderArgs, list);\r
+ }\r
+\r
+ closeSession(session);\r
+ }\r
+ }\r
+\r
+ return list;\r
+ }\r
+ </#if>\r
+\r
+ <#if entity.isPermissionCheckEnabled(finder)>\r
+ /**\r
+ * Returns all the ${entity.humanNames} that the user has permission to view where ${finder.getHumanConditions(false)}.\r
+ *\r
+ <#list finderColsList as finderCol>\r
+ * @param ${finderCol.name} the ${finderCol.humanName}\r
+ </#list>\r
+ * @return the matching ${entity.humanNames} that the user has permission to view\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public List<${entity.name}> filterFindBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.type} ${finderCol.name}\r
+\r
+ <#if finderCol_has_next>\r
+ ,\r
+ </#if>\r
+ </#list>\r
+\r
+ ) throws SystemException {\r
+ return filterFindBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.name},\r
+ </#list>\r
+\r
+ QueryUtil.ALL_POS, QueryUtil.ALL_POS, null);\r
+ }\r
+\r
+ /**\r
+ * Returns a range of all the ${entity.humanNames} that the user has permission to view where ${finder.getHumanConditions(false)}.\r
+ *\r
+ * <p>\r
+ * <#include "range_comment.ftl">\r
+ * </p>\r
+ *\r
+ <#list finderColsList as finderCol>\r
+ * @param ${finderCol.name} the ${finderCol.humanName}\r
+ </#list>\r
+ * @param start the lower bound of the range of ${entity.humanNames}\r
+ * @param end the upper bound of the range of ${entity.humanNames} (not inclusive)\r
+ * @return the range of matching ${entity.humanNames} that the user has permission to view\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public List<${entity.name}> filterFindBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.type} ${finderCol.name},\r
+ </#list>\r
+\r
+ int start, int end) throws SystemException {\r
+ return filterFindBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.name},\r
+ </#list>\r
+\r
+ start, end, null);\r
+ }\r
+\r
+ /**\r
+ * Returns an ordered range of all the ${entity.humanNames} that the user has permissions to view where ${finder.getHumanConditions(false)}.\r
+ *\r
+ * <p>\r
+ * <#include "range_comment.ftl">\r
+ * </p>\r
+ *\r
+ <#list finderColsList as finderCol>\r
+ * @param ${finderCol.name} the ${finderCol.humanName}\r
+ </#list>\r
+ * @param start the lower bound of the range of ${entity.humanNames}\r
+ * @param end the upper bound of the range of ${entity.humanNames} (not inclusive)\r
+ * @param orderByComparator the comparator to order the results by (optionally <code>null</code>)\r
+ * @return the ordered range of matching ${entity.humanNames} that the user has permission to view\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public List<${entity.name}> filterFindBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.type} ${finderCol.name},\r
+ </#list>\r
+\r
+ int start, int end, OrderByComparator orderByComparator) throws SystemException {\r
+ if (!InlineSQLHelperUtil.isEnabled(<#if finder.hasColumn("groupId")>groupId</#if>)) {\r
+ return findBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.name},\r
+ </#list>\r
+\r
+ start, end, orderByComparator);\r
+ }\r
+\r
+ <#if entity.isPermissionedModel()>\r
+ <#include "persistence_impl_find_by_query.ftl">\r
+\r
+ String sql = InlineSQLHelperUtil.replacePermissionCheck(query.toString(), ${entity.name}.class.getName(), _FILTER_ENTITY_TABLE_FILTER_PK_COLUMN, _FILTER_ENTITY_TABLE_FILTER_USERID_COLUMN<#if finder.hasColumn("groupId")>, groupId</#if>);\r
+\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ Query q = session.createQuery(sql);\r
+\r
+ QueryPos qPos = QueryPos.getInstance(q);\r
+\r
+ <#include "persistence_impl_finder_qpos.ftl">\r
+\r
+ return (List<${entity.name}>)QueryUtil.list(q, getDialect(), start, end);\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ closeSession(session);\r
+ }\r
+ <#else>\r
+ StringBundler query = null;\r
+\r
+ if (orderByComparator != null) {\r
+ query = new StringBundler(${finderColsList?size + 2} + (orderByComparator.getOrderByFields().length * 3));\r
+ }\r
+ else {\r
+ query = new StringBundler(<#if entity.getOrder()??>${finderColsList?size + 2}<#else>${finderColsList?size + 1}</#if>);\r
+ }\r
+\r
+ if (getDB().isSupportsInlineDistinct()) {\r
+ query.append(_FILTER_SQL_SELECT_${entity.alias?upper_case}_WHERE);\r
+ }\r
+ else {\r
+ query.append(_FILTER_SQL_SELECT_${entity.alias?upper_case}_NO_INLINE_DISTINCT_WHERE_1);\r
+ }\r
+\r
+ <#include "persistence_impl_finder_cols.ftl">\r
+\r
+ if (!getDB().isSupportsInlineDistinct()) {\r
+ query.append(_FILTER_SQL_SELECT_${entity.alias?upper_case}_NO_INLINE_DISTINCT_WHERE_2);\r
+ }\r
+\r
+ if (orderByComparator != null) {\r
+ if (getDB().isSupportsInlineDistinct()) {\r
+ appendOrderByComparator(query, _ORDER_BY_ENTITY_ALIAS, orderByComparator);\r
+ }\r
+ else {\r
+ appendOrderByComparator(query, _ORDER_BY_ENTITY_TABLE, orderByComparator);\r
+ }\r
+ }\r
+\r
+ <#if entity.getOrder()??>\r
+ else {\r
+ if (getDB().isSupportsInlineDistinct()) {\r
+ query.append(${entity.name}ModelImpl.ORDER_BY_JPQL);\r
+ }\r
+ else {\r
+ query.append(${entity.name}ModelImpl.ORDER_BY_SQL);\r
+ }\r
+ }\r
+ </#if>\r
+\r
+ String sql = InlineSQLHelperUtil.replacePermissionCheck(query.toString(), ${entity.name}.class.getName(), _FILTER_ENTITY_TABLE_FILTER_PK_COLUMN<#if finder.hasColumn("groupId")>, groupId</#if>);\r
+\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ SQLQuery q = session.createSQLQuery(sql);\r
+\r
+ if (getDB().isSupportsInlineDistinct()) {\r
+ q.addEntity(_FILTER_ENTITY_ALIAS, ${entity.name}Impl.class);\r
+ }\r
+ else {\r
+ q.addEntity(_FILTER_ENTITY_TABLE, ${entity.name}Impl.class);\r
+ }\r
+\r
+ QueryPos qPos = QueryPos.getInstance(q);\r
+\r
+ <#include "persistence_impl_finder_qpos.ftl">\r
+\r
+ return (List<${entity.name}>)QueryUtil.list(q, getDialect(), start, end);\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ closeSession(session);\r
+ }\r
+ </#if>\r
+ }\r
+\r
+ /**\r
+ * Returns the ${entity.humanNames} before and after the current ${entity.humanName} in the ordered set of ${entity.humanNames} that the user has permission to view where ${finder.getHumanConditions(false)}.\r
+ *\r
+ * @param ${entity.PKVarName} the primary key of the current ${entity.humanName}\r
+ <#list finderColsList as finderCol>\r
+ * @param ${finderCol.name} the ${finderCol.humanName}\r
+ </#list>\r
+ * @param orderByComparator the comparator to order the set by (optionally <code>null</code>)\r
+ * @return the previous, current, and next ${entity.humanName}\r
+ * @throws ${packagePath}.${noSuchEntity}Exception if a ${entity.humanName} with the primary key could not be found\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public ${entity.name}[] filterFindBy${finder.name}_PrevAndNext(${entity.PKClassName} ${entity.PKVarName},\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.type} ${finderCol.name},\r
+ </#list>\r
+\r
+ OrderByComparator orderByComparator) throws ${noSuchEntity}Exception, SystemException {\r
+ if (!InlineSQLHelperUtil.isEnabled(<#if finder.hasColumn("groupId")>groupId</#if>)) {\r
+ return findBy${finder.name}_PrevAndNext(${entity.PKVarName},\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.name},\r
+ </#list>\r
+\r
+ orderByComparator);\r
+ }\r
+\r
+ ${entity.name} ${entity.varName} = findByPrimaryKey(${entity.PKVarName});\r
+\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ ${entity.name}[] array = new ${entity.name}Impl[3];\r
+\r
+ array[0] =\r
+ filterGetBy${finder.name}_PrevAndNext(\r
+ session, ${entity.varName},\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.name},\r
+ </#list>\r
+\r
+ orderByComparator, true);\r
+\r
+ array[1] = ${entity.varName};\r
+\r
+ array[2] =\r
+ filterGetBy${finder.name}_PrevAndNext(\r
+ session, ${entity.varName},\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.name},\r
+ </#list>\r
+\r
+ orderByComparator, false);\r
+\r
+ return array;\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ closeSession(session);\r
+ }\r
+ }\r
+\r
+ protected ${entity.name} filterGetBy${finder.name}_PrevAndNext(\r
+ Session session, ${entity.name} ${entity.varName},\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.type} ${finderCol.name},\r
+ </#list>\r
+\r
+ OrderByComparator orderByComparator, boolean previous) {\r
+\r
+ <#if entity.isPermissionedModel()>\r
+ <#include "persistence_impl_get_by_prev_and_next_query.ftl">\r
+\r
+ String sql = InlineSQLHelperUtil.replacePermissionCheck(query.toString(), ${entity.name}.class.getName(), _FILTER_ENTITY_TABLE_FILTER_PK_COLUMN, _FILTER_ENTITY_TABLE_FILTER_USERID_COLUMN<#if finder.hasColumn("groupId")>, groupId</#if>);\r
+\r
+ Query q = session.createQuery(sql);\r
+\r
+ q.setFirstResult(0);\r
+ q.setMaxResults(2);\r
+\r
+ QueryPos qPos = QueryPos.getInstance(q);\r
+\r
+ <#include "persistence_impl_finder_qpos.ftl">\r
+\r
+ if (orderByComparator != null) {\r
+ Object[] values = orderByComparator.getOrderByConditionValues(${entity.varName});\r
+\r
+ for (Object value : values) {\r
+ qPos.add(value);\r
+ }\r
+ }\r
+\r
+ List<${entity.name}> list = q.list();\r
+\r
+ if (list.size() == 2) {\r
+ return list.get(1);\r
+ }\r
+ else {\r
+ return null;\r
+ }\r
+ <#else>\r
+ StringBundler query = null;\r
+\r
+ if (orderByComparator != null) {\r
+ query = new StringBundler(6 + (orderByComparator.getOrderByFields().length * 6));\r
+ }\r
+ else {\r
+ query = new StringBundler(3);\r
+ }\r
+\r
+ if (getDB().isSupportsInlineDistinct()) {\r
+ query.append(_FILTER_SQL_SELECT_${entity.alias?upper_case}_WHERE);\r
+ }\r
+ else {\r
+ query.append(_FILTER_SQL_SELECT_${entity.alias?upper_case}_NO_INLINE_DISTINCT_WHERE_1);\r
+ }\r
+\r
+ <#include "persistence_impl_finder_cols.ftl">\r
+\r
+ if (!getDB().isSupportsInlineDistinct()) {\r
+ query.append(_FILTER_SQL_SELECT_${entity.alias?upper_case}_NO_INLINE_DISTINCT_WHERE_2);\r
+ }\r
+\r
+ if (orderByComparator != null) {\r
+ String[] orderByConditionFields = orderByComparator.getOrderByConditionFields();\r
+\r
+ if (orderByConditionFields.length > 0) {\r
+ query.append(WHERE_AND);\r
+ }\r
+\r
+ for (int i = 0; i < orderByConditionFields.length; i++) {\r
+ if (getDB().isSupportsInlineDistinct()) {\r
+ query.append(_ORDER_BY_ENTITY_ALIAS);\r
+ }\r
+ else {\r
+ query.append(_ORDER_BY_ENTITY_TABLE);\r
+ }\r
+\r
+ query.append(orderByConditionFields[i]);\r
+\r
+ if ((i + 1) < orderByConditionFields.length) {\r
+ if (orderByComparator.isAscending() ^ previous) {\r
+ query.append(WHERE_GREATER_THAN_HAS_NEXT);\r
+ }\r
+ else {\r
+ query.append(WHERE_LESSER_THAN_HAS_NEXT);\r
+ }\r
+ }\r
+ else {\r
+ if (orderByComparator.isAscending() ^ previous) {\r
+ query.append(WHERE_GREATER_THAN);\r
+ }\r
+ else {\r
+ query.append(WHERE_LESSER_THAN);\r
+ }\r
+ }\r
+ }\r
+\r
+ query.append(ORDER_BY_CLAUSE);\r
+\r
+ String[] orderByFields = orderByComparator.getOrderByFields();\r
+\r
+ for (int i = 0; i < orderByFields.length; i++) {\r
+ if (getDB().isSupportsInlineDistinct()) {\r
+ query.append(_ORDER_BY_ENTITY_ALIAS);\r
+ }\r
+ else {\r
+ query.append(_ORDER_BY_ENTITY_TABLE);\r
+ }\r
+\r
+ query.append(orderByFields[i]);\r
+\r
+ if ((i + 1) < orderByFields.length) {\r
+ if (orderByComparator.isAscending() ^ previous) {\r
+ query.append(ORDER_BY_ASC_HAS_NEXT);\r
+ }\r
+ else {\r
+ query.append(ORDER_BY_DESC_HAS_NEXT);\r
+ }\r
+ }\r
+ else {\r
+ if (orderByComparator.isAscending() ^ previous) {\r
+ query.append(ORDER_BY_ASC);\r
+ }\r
+ else {\r
+ query.append(ORDER_BY_DESC);\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ <#if entity.getOrder()??>\r
+ else {\r
+ if (getDB().isSupportsInlineDistinct()) {\r
+ query.append(${entity.name}ModelImpl.ORDER_BY_JPQL);\r
+ }\r
+ else {\r
+ query.append(${entity.name}ModelImpl.ORDER_BY_SQL);\r
+ }\r
+ }\r
+ </#if>\r
+\r
+ String sql = InlineSQLHelperUtil.replacePermissionCheck(query.toString(), ${entity.name}.class.getName(), _FILTER_ENTITY_TABLE_FILTER_PK_COLUMN<#if finder.hasColumn("groupId")>, groupId</#if>);\r
+\r
+ SQLQuery q = session.createSQLQuery(sql);\r
+\r
+ q.setFirstResult(0);\r
+ q.setMaxResults(2);\r
+\r
+ if (getDB().isSupportsInlineDistinct()) {\r
+ q.addEntity(_FILTER_ENTITY_ALIAS, ${entity.name}Impl.class);\r
+ }\r
+ else {\r
+ q.addEntity(_FILTER_ENTITY_TABLE, ${entity.name}Impl.class);\r
+ }\r
+\r
+ QueryPos qPos = QueryPos.getInstance(q);\r
+\r
+ <#include "persistence_impl_finder_qpos.ftl">\r
+\r
+ if (orderByComparator != null) {\r
+ Object[] values = orderByComparator.getOrderByConditionValues(${entity.varName});\r
+\r
+ for (Object value : values) {\r
+ qPos.add(value);\r
+ }\r
+ }\r
+\r
+ List<${entity.name}> list = q.list();\r
+\r
+ if (list.size() == 2) {\r
+ return list.get(1);\r
+ }\r
+ else {\r
+ return null;\r
+ }\r
+ </#if>\r
+ }\r
+\r
+ <#if finder.hasArrayableOperator()>\r
+ /**\r
+ * Returns all the ${entity.humanNames} that the user has permission to view where ${finder.getHumanConditions(true)}.\r
+ *\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.hasArrayableOperator()>\r
+ * @param ${finderCol.names} the ${finderCol.humanNames}\r
+ <#else>\r
+ * @param ${finderCol.name} the ${finderCol.humanName}\r
+ </#if>\r
+ </#list>\r
+ * @return the matching ${entity.humanNames} that the user has permission to view\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public List<${entity.name}> filterFindBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.hasArrayableOperator()>\r
+ ${finderCol.type}[] ${finderCol.names}\r
+ <#else>\r
+ ${finderCol.type} ${finderCol.name}\r
+ </#if>\r
+\r
+ <#if finderCol_has_next>\r
+ ,\r
+ </#if>\r
+ </#list>\r
+\r
+ ) throws SystemException {\r
+ return filterFindBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.hasArrayableOperator()>\r
+ ${finderCol.names},\r
+ <#else>\r
+ ${finderCol.name},\r
+ </#if>\r
+ </#list>\r
+\r
+ QueryUtil.ALL_POS, QueryUtil.ALL_POS, null);\r
+ }\r
+\r
+ /**\r
+ * Returns a range of all the ${entity.humanNames} that the user has permission to view where ${finder.getHumanConditions(true)}.\r
+ *\r
+ * <p>\r
+ * <#include "range_comment.ftl">\r
+ * </p>\r
+ *\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.hasArrayableOperator()>\r
+ * @param ${finderCol.names} the ${finderCol.humanNames}\r
+ <#else>\r
+ * @param ${finderCol.name} the ${finderCol.humanName}\r
+ </#if>\r
+ </#list>\r
+ * @param start the lower bound of the range of ${entity.humanNames}\r
+ * @param end the upper bound of the range of ${entity.humanNames} (not inclusive)\r
+ * @return the range of matching ${entity.humanNames} that the user has permission to view\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public List<${entity.name}> filterFindBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.hasArrayableOperator()>\r
+ ${finderCol.type}[] ${finderCol.names},\r
+ <#else>\r
+ ${finderCol.type} ${finderCol.name},\r
+ </#if>\r
+ </#list>\r
+\r
+ int start, int end) throws SystemException {\r
+ return filterFindBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.hasArrayableOperator()>\r
+ ${finderCol.names},\r
+ <#else>\r
+ ${finderCol.name},\r
+ </#if>\r
+ </#list>\r
+\r
+ start, end, null);\r
+ }\r
+\r
+ /**\r
+ * Returns an ordered range of all the ${entity.humanNames} that the user has permission to view where ${finder.getHumanConditions(true)}.\r
+ *\r
+ * <p>\r
+ * <#include "range_comment.ftl">\r
+ * </p>\r
+ *\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.hasArrayableOperator()>\r
+ * @param ${finderCol.names} the ${finderCol.humanNames}\r
+ <#else>\r
+ * @param ${finderCol.name} the ${finderCol.humanName}\r
+ </#if>\r
+ </#list>\r
+ * @param start the lower bound of the range of ${entity.humanNames}\r
+ * @param end the upper bound of the range of ${entity.humanNames} (not inclusive)\r
+ * @param orderByComparator the comparator to order the results by (optionally <code>null</code>)\r
+ * @return the ordered range of matching ${entity.humanNames} that the user has permission to view\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public List<${entity.name}> filterFindBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.hasArrayableOperator()>\r
+ ${finderCol.type}[] ${finderCol.names},\r
+ <#else>\r
+ ${finderCol.type} ${finderCol.name},\r
+ </#if>\r
+ </#list>\r
+\r
+ int start, int end, OrderByComparator orderByComparator) throws SystemException {\r
+ if (!InlineSQLHelperUtil.isEnabled(\r
+ <#if finder.hasColumn("groupId")>\r
+ <#if finder.getColumn("groupId").hasArrayableOperator()>\r
+ groupIds\r
+ <#else>\r
+ groupId\r
+ </#if>\r
+ </#if>)) {\r
+\r
+ return findBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.hasArrayableOperator()>\r
+ ${finderCol.names},\r
+ <#else>\r
+ ${finderCol.name},\r
+ </#if>\r
+ </#list>\r
+\r
+ start, end, orderByComparator);\r
+ }\r
+\r
+ <#if entity.isPermissionedModel()>\r
+ <#include "persistence_impl_find_by_arrayable_query.ftl">\r
+\r
+ String sql = InlineSQLHelperUtil.replacePermissionCheck(query.toString(), ${entity.name}.class.getName(), _FILTER_ENTITY_TABLE_FILTER_PK_COLUMN, _FILTER_ENTITY_TABLE_FILTER_USERID_COLUMN\r
+\r
+ <#if finder.hasColumn("groupId")>,\r
+ <#if finder.getColumn("groupId").hasArrayableOperator()>\r
+ groupIds\r
+ <#else>\r
+ groupId\r
+ </#if>\r
+ </#if>);\r
+\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ Query q = session.createQuery(sql);\r
+\r
+ QueryPos qPos = QueryPos.getInstance(q);\r
+\r
+ <#include "persistence_impl_finder_arrayable_qpos.ftl">\r
+\r
+ return (List<${entity.name}>)QueryUtil.list(q, getDialect(), start, end);\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ closeSession(session);\r
+ }\r
+ <#else>\r
+ StringBundler query = new StringBundler();\r
+\r
+ if (getDB().isSupportsInlineDistinct()) {\r
+ query.append(_FILTER_SQL_SELECT_${entity.alias?upper_case}_WHERE);\r
+ }\r
+ else {\r
+ query.append(_FILTER_SQL_SELECT_${entity.alias?upper_case}_NO_INLINE_DISTINCT_WHERE_1);\r
+ }\r
+\r
+ <#include "persistence_impl_finder_arrayable_cols.ftl">\r
+\r
+ if (!getDB().isSupportsInlineDistinct()) {\r
+ query.append(_FILTER_SQL_SELECT_${entity.alias?upper_case}_NO_INLINE_DISTINCT_WHERE_2);\r
+ }\r
+\r
+ if (orderByComparator != null) {\r
+ if (getDB().isSupportsInlineDistinct()) {\r
+ appendOrderByComparator(query, _ORDER_BY_ENTITY_ALIAS, orderByComparator);\r
+ }\r
+ else {\r
+ appendOrderByComparator(query, _ORDER_BY_ENTITY_TABLE, orderByComparator);\r
+ }\r
+ }\r
+\r
+ <#if entity.getOrder()??>\r
+ else {\r
+ if (getDB().isSupportsInlineDistinct()) {\r
+ query.append(${entity.name}ModelImpl.ORDER_BY_JPQL);\r
+ }\r
+ else {\r
+ query.append(${entity.name}ModelImpl.ORDER_BY_SQL);\r
+ }\r
+ }\r
+ </#if>\r
+\r
+ String sql = InlineSQLHelperUtil.replacePermissionCheck(query.toString(), ${entity.name}.class.getName(), _FILTER_ENTITY_TABLE_FILTER_PK_COLUMN\r
+\r
+ <#if finder.hasColumn("groupId")>,\r
+ <#if finder.getColumn("groupId").hasArrayableOperator()>\r
+ groupIds\r
+ <#else>\r
+ groupId\r
+ </#if>\r
+ </#if>);\r
+\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ SQLQuery q = session.createSQLQuery(sql);\r
+\r
+ if (getDB().isSupportsInlineDistinct()) {\r
+ q.addEntity(_FILTER_ENTITY_ALIAS, ${entity.name}Impl.class);\r
+ }\r
+ else {\r
+ q.addEntity(_FILTER_ENTITY_TABLE, ${entity.name}Impl.class);\r
+ }\r
+\r
+ QueryPos qPos = QueryPos.getInstance(q);\r
+\r
+ <#include "persistence_impl_finder_arrayable_qpos.ftl">\r
+\r
+ return (List<${entity.name}>)QueryUtil.list(q, getDialect(), start, end);\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ closeSession(session);\r
+ }\r
+ </#if>\r
+ }\r
+ </#if>\r
+ </#if>\r
+ <#else>\r
+ /**\r
+ * Returns the ${entity.humanName} where ${finder.getHumanConditions(false)} or throws a {@link ${packagePath}.${noSuchEntity}Exception} if it could not be found.\r
+ *\r
+ <#list finderColsList as finderCol>\r
+ * @param ${finderCol.name} the ${finderCol.humanName}\r
+ </#list>\r
+ * @return the matching ${entity.humanName}\r
+ * @throws ${packagePath}.${noSuchEntity}Exception if a matching ${entity.humanName} could not be found\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public ${entity.name} findBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.type} ${finderCol.name}\r
+\r
+ <#if finderCol_has_next>\r
+ ,\r
+ </#if>\r
+ </#list>\r
+\r
+ ) throws ${noSuchEntity}Exception, SystemException {\r
+ ${entity.name} ${entity.varName} = fetchBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.name}\r
+\r
+ <#if finderCol_has_next>\r
+ ,\r
+ </#if>\r
+ </#list>\r
+\r
+ );\r
+\r
+ if ( ${entity.varName} == null) {\r
+ StringBundler msg = new StringBundler(${(finderColsList?size * 2) + 2});\r
+\r
+ msg.append(_NO_SUCH_ENTITY_WITH_KEY);\r
+\r
+ <#list finderColsList as finderCol>\r
+ msg.append("<#if finderCol_index != 0>, </#if>${finderCol.name}=");\r
+ msg.append(${finderCol.name});\r
+\r
+ <#if !finderCol_has_next>\r
+ msg.append(StringPool.CLOSE_CURLY_BRACE);\r
+ </#if>\r
+ </#list>\r
+\r
+ if (_log.isWarnEnabled()) {\r
+ _log.warn(msg.toString());\r
+ }\r
+\r
+ throw new ${noSuchEntity}Exception(msg.toString());\r
+ }\r
+\r
+ return ${entity.varName};\r
+ }\r
+\r
+ /**\r
+ * Returns the ${entity.humanName} where ${finder.getHumanConditions(false)} or returns <code>null</code> if it could not be found. Uses the finder cache.\r
+ *\r
+ <#list finderColsList as finderCol>\r
+ * @param ${finderCol.name} the ${finderCol.humanName}\r
+ </#list>\r
+ * @return the matching ${entity.humanName}, or <code>null</code> if a matching ${entity.humanName} could not be found\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public ${entity.name} fetchBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.type} ${finderCol.name}\r
+\r
+ <#if finderCol_has_next>\r
+ ,\r
+ </#if>\r
+ </#list>\r
+\r
+ ) throws SystemException {\r
+ return fetchBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.name},\r
+ </#list>\r
+\r
+ true);\r
+ }\r
+\r
+ /**\r
+ * Returns the ${entity.humanName} where ${finder.getHumanConditions(false)} or returns <code>null</code> if it could not be found, optionally using the finder cache.\r
+ *\r
+ <#list finderColsList as finderCol>\r
+ * @param ${finderCol.name} the ${finderCol.humanName}\r
+ </#list>\r
+ * @param retrieveFromCache whether to use the finder cache\r
+ * @return the matching ${entity.humanName}, or <code>null</code> if a matching ${entity.humanName} could not be found\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public ${entity.name} fetchBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.type} ${finderCol.name}\r
+\r
+ ,\r
+ </#list>\r
+\r
+ boolean retrieveFromCache) throws SystemException {\r
+ Object[] finderArgs = new Object[] {\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.name}\r
+\r
+ <#if finderCol_has_next>\r
+ ,\r
+ </#if>\r
+ </#list>\r
+ };\r
+\r
+ Object result = null;\r
+\r
+ if (retrieveFromCache) {\r
+ result = FinderCacheUtil.getResult(FINDER_PATH_FETCH_BY_${finder.name?upper_case}, finderArgs, this);\r
+ }\r
+\r
+ if (result instanceof ${entity.name}) {\r
+ ${entity.name} ${entity.varName} = (${entity.name})result;\r
+\r
+ if (\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.isPrimitiveType(false)>\r
+ (${finderCol.name} != ${entity.varName}.get${finderCol.methodName}())\r
+ <#else>\r
+ !Validator.equals(${finderCol.name}, ${entity.varName}.get${finderCol.methodName}())\r
+ </#if>\r
+\r
+ <#if finderCol_has_next>\r
+ ||\r
+ </#if>\r
+ </#list>\r
+ ) {\r
+ result = null;\r
+ }\r
+ }\r
+\r
+ if (result == null) {\r
+ StringBundler query = new StringBundler(<#if entity.getOrder()??>${finderColsList?size + 2}<#else>${finderColsList?size + 1}</#if>);\r
+\r
+ query.append(_SQL_SELECT_${entity.alias?upper_case}_WHERE);\r
+\r
+ <#include "persistence_impl_finder_cols.ftl">\r
+\r
+ <#if entity.getOrder()??>\r
+ query.append(${entity.name}ModelImpl.ORDER_BY_JPQL);\r
+ </#if>\r
+\r
+ String sql = query.toString();\r
+\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ Query q = session.createQuery(sql);\r
+\r
+ QueryPos qPos = QueryPos.getInstance(q);\r
+\r
+ <#include "persistence_impl_finder_qpos.ftl">\r
+\r
+ List<${entity.name}> list = q.list();\r
+\r
+ result = list;\r
+\r
+ ${entity.name} ${entity.varName} = null;\r
+\r
+ if (list.isEmpty()) {\r
+ FinderCacheUtil.putResult(FINDER_PATH_FETCH_BY_${finder.name?upper_case}, finderArgs, list);\r
+ }\r
+ else {\r
+ ${entity.varName} = list.get(0);\r
+\r
+ cacheResult(${entity.varName});\r
+\r
+ if (\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.isPrimitiveType()>\r
+ (${entity.varName}.get${finderCol.methodName}() != ${finderCol.name})\r
+ <#else>\r
+ (${entity.varName}.get${finderCol.methodName}() == null) || !${entity.varName}.get${finderCol.methodName}().equals(${finderCol.name})\r
+ </#if>\r
+\r
+ <#if finderCol_has_next>\r
+ ||\r
+ </#if>\r
+ </#list>\r
+ ) {\r
+ FinderCacheUtil.putResult(FINDER_PATH_FETCH_BY_${finder.name?upper_case}, finderArgs, ${entity.varName});\r
+ }\r
+ }\r
+\r
+ return ${entity.varName};\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ if (result == null) {\r
+ FinderCacheUtil.removeResult(FINDER_PATH_FETCH_BY_${finder.name?upper_case}, finderArgs);\r
+ }\r
+\r
+ closeSession(session);\r
+ }\r
+ }\r
+ else {\r
+ if (result instanceof List<?>) {\r
+ return null;\r
+ }\r
+ else {\r
+ return (${entity.name})result;\r
+ }\r
+ }\r
+ }\r
+ </#if>\r
+ </#list>\r
+\r
+ /**\r
+ * Returns all the ${entity.humanNames}.\r
+ *\r
+ * @return the ${entity.humanNames}\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public List<${entity.name}> findAll() throws SystemException {\r
+ return findAll(QueryUtil.ALL_POS, QueryUtil.ALL_POS, null);\r
+ }\r
+\r
+ /**\r
+ * Returns a range of all the ${entity.humanNames}.\r
+ *\r
+ * <p>\r
+ * <#include "range_comment.ftl">\r
+ * </p>\r
+ *\r
+ * @param start the lower bound of the range of ${entity.humanNames}\r
+ * @param end the upper bound of the range of ${entity.humanNames} (not inclusive)\r
+ * @return the range of ${entity.humanNames}\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public List<${entity.name}> findAll(int start, int end) throws SystemException {\r
+ return findAll(start, end, null);\r
+ }\r
+\r
+ /**\r
+ * Returns an ordered range of all the ${entity.humanNames}.\r
+ *\r
+ * <p>\r
+ * <#include "range_comment.ftl">\r
+ * </p>\r
+ *\r
+ * @param start the lower bound of the range of ${entity.humanNames}\r
+ * @param end the upper bound of the range of ${entity.humanNames} (not inclusive)\r
+ * @param orderByComparator the comparator to order the results by (optionally <code>null</code>)\r
+ * @return the ordered range of ${entity.humanNames}\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public List<${entity.name}> findAll(int start, int end, OrderByComparator orderByComparator) throws SystemException {\r
+ FinderPath finderPath = null;\r
+ Object[] finderArgs = new Object[] {start, end, orderByComparator};\r
+\r
+ if ((start == QueryUtil.ALL_POS) && (end == QueryUtil.ALL_POS) && (orderByComparator == null)) {\r
+ finderPath = FINDER_PATH_WITHOUT_PAGINATION_FIND_ALL;\r
+ finderArgs = FINDER_ARGS_EMPTY;\r
+ }\r
+ else {\r
+ finderPath = FINDER_PATH_WITH_PAGINATION_FIND_ALL;\r
+ finderArgs = new Object[] {start, end, orderByComparator};\r
+ }\r
+\r
+ List<${entity.name}> list = (List<${entity.name}>)FinderCacheUtil.getResult(finderPath, finderArgs, this);\r
+\r
+ if (list == null) {\r
+ StringBundler query = null;\r
+ String sql = null;\r
+\r
+ if (orderByComparator != null) {\r
+ query = new StringBundler(2 + (orderByComparator.getOrderByFields().length * 3));\r
+\r
+ query.append(_SQL_SELECT_${entity.alias?upper_case});\r
+\r
+ appendOrderByComparator(query, _ORDER_BY_ENTITY_ALIAS, orderByComparator);\r
+\r
+ sql = query.toString();\r
+ }\r
+ else {\r
+ <#if entity.getOrder()??>\r
+ sql = _SQL_SELECT_${entity.alias?upper_case}.concat(${entity.name}ModelImpl.ORDER_BY_JPQL);\r
+ <#else>\r
+ sql = _SQL_SELECT_${entity.alias?upper_case};\r
+ </#if>\r
+ }\r
+\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ Query q = session.createQuery(sql);\r
+\r
+ if (orderByComparator == null) {\r
+ list = (List<${entity.name}>)QueryUtil.list(q, getDialect(), start, end, false);\r
+\r
+ Collections.sort(list);\r
+ }\r
+ else {\r
+ list = (List<${entity.name}>)QueryUtil.list(q, getDialect(), start, end);\r
+ }\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ if (list == null) {\r
+ FinderCacheUtil.removeResult(finderPath, finderArgs);\r
+ }\r
+ else {\r
+ cacheResult(list);\r
+\r
+ FinderCacheUtil.putResult(finderPath, finderArgs, list);\r
+ }\r
+\r
+ closeSession(session);\r
+ }\r
+ }\r
+\r
+ return list;\r
+ }\r
+\r
+ <#list entity.getFinderList() as finder>\r
+ <#assign finderColsList = finder.getColumns()>\r
+\r
+ <#if finder.isCollection()>\r
+ /**\r
+ * Removes all the ${entity.humanNames} where ${finder.getHumanConditions(false)} from the database.\r
+ *\r
+ <#list finderColsList as finderCol>\r
+ * @param ${finderCol.name} the ${finderCol.humanName}\r
+ </#list>\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public void removeBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.type} ${finderCol.name}<#if finderCol_has_next>,</#if>\r
+ </#list>\r
+\r
+ ) throws SystemException {\r
+ for (${entity.name} ${entity.varName} : findBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.name}\r
+\r
+ <#if finderCol_has_next>\r
+ ,\r
+ </#if>\r
+ </#list>\r
+\r
+ )) {\r
+ remove(${entity.varName});\r
+ }\r
+ }\r
+ <#else>\r
+ /**\r
+ * Removes the ${entity.humanName} where ${finder.getHumanConditions(false)} from the database.\r
+ *\r
+ <#list finderColsList as finderCol>\r
+ * @param ${finderCol.name} the ${finderCol.humanName}\r
+ </#list>\r
+ * @return the ${entity.humanName} that was removed\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public ${entity.name} removeBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.type} ${finderCol.name}\r
+\r
+ <#if finderCol_has_next>\r
+ ,\r
+ </#if>\r
+ </#list>\r
+\r
+ ) throws ${noSuchEntity}Exception, SystemException {\r
+ ${entity.name} ${entity.varName} = findBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.name}\r
+\r
+ <#if finderCol_has_next>\r
+ ,\r
+ </#if>\r
+ </#list>\r
+\r
+ );\r
+\r
+ return remove(${entity.varName});\r
+ }\r
+ </#if>\r
+ </#list>\r
+\r
+ /**\r
+ * Removes all the ${entity.humanNames} from the database.\r
+ *\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public void removeAll() throws SystemException {\r
+ for (${entity.name} ${entity.varName} : findAll()) {\r
+ remove(${entity.varName});\r
+ }\r
+ }\r
+\r
+ <#list entity.getFinderList() as finder>\r
+ <#assign finderColsList = finder.getColumns()>\r
+\r
+ /**\r
+ * Returns the number of ${entity.humanNames} where ${finder.getHumanConditions(false)}.\r
+ *\r
+ <#list finderColsList as finderCol>\r
+ * @param ${finderCol.name} the ${finderCol.humanName}\r
+ </#list>\r
+ * @return the number of matching ${entity.humanNames}\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public int countBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.type} ${finderCol.name}\r
+\r
+ <#if finderCol_has_next>\r
+ ,\r
+ </#if>\r
+ </#list>\r
+\r
+ ) throws SystemException {\r
+ Object[] finderArgs = new Object[] {\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.name}\r
+\r
+ <#if finderCol_has_next>\r
+ ,\r
+ </#if>\r
+ </#list>\r
+ };\r
+\r
+ Long count = (Long)FinderCacheUtil.getResult(\r
+ <#if !finder.hasCustomComparator()>\r
+ FINDER_PATH_COUNT_BY_${finder.name?upper_case},\r
+ <#else>\r
+ FINDER_PATH_WITH_PAGINATION_COUNT_BY_${finder.name?upper_case},\r
+ </#if>\r
+ finderArgs, this);\r
+\r
+ if (count == null) {\r
+ <#include "persistence_impl_count_by_query.ftl">\r
+\r
+ String sql = query.toString();\r
+\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ Query q = session.createQuery(sql);\r
+\r
+ QueryPos qPos = QueryPos.getInstance(q);\r
+\r
+ <#include "persistence_impl_finder_qpos.ftl">\r
+\r
+ count = (Long)q.uniqueResult();\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ if (count == null) {\r
+ count = Long.valueOf(0);\r
+ }\r
+\r
+ FinderCacheUtil.putResult(\r
+ <#if !finder.hasCustomComparator()>\r
+ FINDER_PATH_COUNT_BY_${finder.name?upper_case},\r
+ <#else>\r
+ FINDER_PATH_WITH_PAGINATION_COUNT_BY_${finder.name?upper_case},\r
+ </#if>\r
+ finderArgs, count);\r
+\r
+ closeSession(session);\r
+ }\r
+ }\r
+\r
+ return count.intValue();\r
+ }\r
+\r
+ <#if finder.hasArrayableOperator()>\r
+ /**\r
+ * Returns the number of ${entity.humanNames} where ${finder.getHumanConditions(true)}.\r
+ *\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.hasArrayableOperator()>\r
+ * @param ${finderCol.names} the ${finderCol.humanNames}\r
+ <#else>\r
+ * @param ${finderCol.name} the ${finderCol.humanName}\r
+ </#if>\r
+ </#list>\r
+ * @return the number of matching ${entity.humanNames}\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public int countBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.hasArrayableOperator()>\r
+ ${finderCol.type}[] ${finderCol.names}\r
+ <#else>\r
+ ${finderCol.type} ${finderCol.name}\r
+ </#if>\r
+\r
+ <#if finderCol_has_next>\r
+ ,\r
+ </#if>\r
+ </#list>\r
+\r
+ ) throws SystemException {\r
+ Object[] finderArgs = new Object[] {\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.hasArrayableOperator()>\r
+ StringUtil.merge(${finderCol.names})\r
+ <#else>\r
+ ${finderCol.name}\r
+ </#if>\r
+\r
+ <#if finderCol_has_next>\r
+ ,\r
+ </#if>\r
+ </#list>\r
+ };\r
+\r
+ Long count = (Long)FinderCacheUtil.getResult(FINDER_PATH_WITH_PAGINATION_COUNT_BY_${finder.name?upper_case}, finderArgs, this);\r
+\r
+ if (count == null) {\r
+ <#include "persistence_impl_count_by_arrayable_query.ftl">\r
+\r
+ String sql = query.toString();\r
+\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ Query q = session.createQuery(sql);\r
+\r
+ QueryPos qPos = QueryPos.getInstance(q);\r
+\r
+ <#include "persistence_impl_finder_arrayable_qpos.ftl">\r
+\r
+ count = (Long)q.uniqueResult();\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ if (count == null) {\r
+ count = Long.valueOf(0);\r
+ }\r
+\r
+ FinderCacheUtil.putResult(FINDER_PATH_WITH_PAGINATION_COUNT_BY_${finder.name?upper_case}, finderArgs, count);\r
+\r
+ closeSession(session);\r
+ }\r
+ }\r
+\r
+ return count.intValue();\r
+ }\r
+ </#if>\r
+\r
+ <#if entity.isPermissionCheckEnabled(finder)>\r
+ /**\r
+ * Returns the number of ${entity.humanNames} that the user has permission to view where ${finder.getHumanConditions(false)}.\r
+ *\r
+ <#list finderColsList as finderCol>\r
+ * @param ${finderCol.name} the ${finderCol.humanName}\r
+ </#list>\r
+ * @return the number of matching ${entity.humanNames} that the user has permission to view\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public int filterCountBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.type} ${finderCol.name}\r
+\r
+ <#if finderCol_has_next>\r
+ ,\r
+ </#if>\r
+ </#list>\r
+\r
+ ) throws SystemException {\r
+ if (!InlineSQLHelperUtil.isEnabled(<#if finder.hasColumn("groupId")>groupId</#if>)) {\r
+ return countBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ ${finderCol.name}\r
+\r
+ <#if finderCol_has_next>\r
+ ,\r
+ </#if>\r
+ </#list>\r
+\r
+ );\r
+ }\r
+\r
+ <#if entity.isPermissionedModel()>\r
+ <#include "persistence_impl_count_by_query.ftl">\r
+\r
+ String sql = InlineSQLHelperUtil.replacePermissionCheck(query.toString(), ${entity.name}.class.getName(), _FILTER_ENTITY_TABLE_FILTER_PK_COLUMN, _FILTER_ENTITY_TABLE_FILTER_USERID_COLUMN<#if finder.hasColumn("groupId")>, groupId</#if>);\r
+\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ Query q = session.createQuery(sql);\r
+\r
+ QueryPos qPos = QueryPos.getInstance(q);\r
+\r
+ <#include "persistence_impl_finder_qpos.ftl">\r
+\r
+ Long count = (Long)q.uniqueResult();\r
+\r
+ return count.intValue();\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ closeSession(session);\r
+ }\r
+ <#else>\r
+ StringBundler query = new StringBundler(${finderColsList?size + 1});\r
+\r
+ query.append(_FILTER_SQL_COUNT_${entity.alias?upper_case}_WHERE);\r
+\r
+ <#include "persistence_impl_finder_cols.ftl">\r
+\r
+ String sql = InlineSQLHelperUtil.replacePermissionCheck(query.toString(), ${entity.name}.class.getName(), _FILTER_ENTITY_TABLE_FILTER_PK_COLUMN<#if finder.hasColumn("groupId")>, groupId</#if>);\r
+\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ SQLQuery q = session.createSQLQuery(sql);\r
+\r
+ q.addScalar(COUNT_COLUMN_NAME, com.liferay.portal.kernel.dao.orm.Type.LONG);\r
+\r
+ QueryPos qPos = QueryPos.getInstance(q);\r
+\r
+ <#include "persistence_impl_finder_qpos.ftl">\r
+\r
+ Long count = (Long)q.uniqueResult();\r
+\r
+ return count.intValue();\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ closeSession(session);\r
+ }\r
+ </#if>\r
+ }\r
+\r
+ <#if finder.hasArrayableOperator()>\r
+ /**\r
+ * Returns the number of ${entity.humanNames} that the user has permission to view where ${finder.getHumanConditions(true)}.\r
+ *\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.hasArrayableOperator()>\r
+ * @param ${finderCol.names} the ${finderCol.humanNames}\r
+ <#else>\r
+ * @param ${finderCol.name} the ${finderCol.humanName}\r
+ </#if>\r
+ </#list>\r
+ * @return the number of matching ${entity.humanNames} that the user has permission to view\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public int filterCountBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.hasArrayableOperator()>\r
+ ${finderCol.type}[] ${finderCol.names}\r
+ <#else>\r
+ ${finderCol.type} ${finderCol.name}\r
+ </#if>\r
+\r
+ <#if finderCol_has_next>\r
+ ,\r
+ </#if>\r
+ </#list>\r
+\r
+ ) throws SystemException {\r
+ if (!InlineSQLHelperUtil.isEnabled(\r
+ <#if finder.hasColumn("groupId")>\r
+ <#if finder.getColumn("groupId").hasArrayableOperator()>\r
+ groupIds\r
+ <#else>\r
+ groupId\r
+ </#if>\r
+ </#if>)) {\r
+\r
+ return countBy${finder.name}(\r
+\r
+ <#list finderColsList as finderCol>\r
+ <#if finderCol.hasArrayableOperator()>\r
+ ${finderCol.names}\r
+ <#else>\r
+ ${finderCol.name}\r
+ </#if>\r
+\r
+ <#if finderCol_has_next>\r
+ ,\r
+ </#if>\r
+ </#list>\r
+\r
+ );\r
+ }\r
+\r
+ <#if entity.isPermissionedModel()>\r
+ <#include "persistence_impl_count_by_arrayable_query.ftl">\r
+\r
+ String sql = InlineSQLHelperUtil.replacePermissionCheck(query.toString(), ${entity.name}.class.getName(), _FILTER_ENTITY_TABLE_FILTER_PK_COLUMN, _FILTER_ENTITY_TABLE_FILTER_USERID_COLUMN\r
+\r
+ <#if finder.hasColumn("groupId")>,\r
+ <#if finder.getColumn("groupId").hasArrayableOperator()>\r
+ groupIds\r
+ <#else>\r
+ groupId\r
+ </#if>\r
+ </#if>);\r
+\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ Query q = session.createQuery(sql);\r
+\r
+ QueryPos qPos = QueryPos.getInstance(q);\r
+\r
+ <#include "persistence_impl_finder_arrayable_qpos.ftl">\r
+\r
+ Long count = (Long)q.uniqueResult();\r
+\r
+ return count.intValue();\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ closeSession(session);\r
+ }\r
+ <#else>\r
+ StringBundler query = new StringBundler();\r
+\r
+ query.append(_FILTER_SQL_COUNT_${entity.alias?upper_case}_WHERE);\r
+\r
+ <#include "persistence_impl_finder_arrayable_cols.ftl">\r
+\r
+ String sql = InlineSQLHelperUtil.replacePermissionCheck(query.toString(), ${entity.name}.class.getName(), _FILTER_ENTITY_TABLE_FILTER_PK_COLUMN\r
+\r
+ <#if finder.hasColumn("groupId")>,\r
+ <#if finder.getColumn("groupId").hasArrayableOperator()>\r
+ groupIds\r
+ <#else>\r
+ groupId\r
+ </#if>\r
+ </#if>);\r
+\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ SQLQuery q = session.createSQLQuery(sql);\r
+\r
+ q.addScalar(COUNT_COLUMN_NAME, com.liferay.portal.kernel.dao.orm.Type.LONG);\r
+\r
+ QueryPos qPos = QueryPos.getInstance(q);\r
+\r
+ <#include "persistence_impl_finder_arrayable_qpos.ftl">\r
+\r
+ Long count = (Long)q.uniqueResult();\r
+\r
+ return count.intValue();\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ closeSession(session);\r
+ }\r
+ </#if>\r
+ }\r
+ </#if>\r
+ </#if>\r
+ </#list>\r
+\r
+ /**\r
+ * Returns the number of ${entity.humanNames}.\r
+ *\r
+ * @return the number of ${entity.humanNames}\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public int countAll() throws SystemException {\r
+ Long count = (Long)FinderCacheUtil.getResult(FINDER_PATH_COUNT_ALL, FINDER_ARGS_EMPTY, this);\r
+\r
+ if (count == null) {\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ Query q = session.createQuery(_SQL_COUNT_${entity.alias?upper_case});\r
+\r
+ count = (Long)q.uniqueResult();\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ if (count == null) {\r
+ count = Long.valueOf(0);\r
+ }\r
+\r
+ FinderCacheUtil.putResult(FINDER_PATH_COUNT_ALL, FINDER_ARGS_EMPTY, count);\r
+\r
+ closeSession(session);\r
+ }\r
+ }\r
+\r
+ return count.intValue();\r
+ }\r
+\r
+ <#list entity.columnList as column>\r
+ <#if column.isCollection() && (column.isMappingManyToMany() || column.isMappingOneToMany())>\r
+ <#assign tempEntity = serviceBuilder.getEntity(column.getEJBName())>\r
+\r
+ /**\r
+ * Returns all the ${tempEntity.humanNames} associated with the ${entity.humanName}.\r
+ *\r
+ * @param pk the primary key of the ${entity.humanName}\r
+ * @return the ${tempEntity.humanNames} associated with the ${entity.humanName}\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public List<${tempEntity.packagePath}.model.${tempEntity.name}> get${tempEntity.names}(${entity.PKClassName} pk) throws SystemException {\r
+ return get${tempEntity.names}(pk, QueryUtil.ALL_POS, QueryUtil.ALL_POS);\r
+ }\r
+\r
+ /**\r
+ * Returns a range of all the ${tempEntity.humanNames} associated with the ${entity.humanName}.\r
+ *\r
+ * <p>\r
+ * <#include "range_comment.ftl">\r
+ * </p>\r
+ *\r
+ * @param pk the primary key of the ${entity.humanName}\r
+ * @param start the lower bound of the range of ${entity.humanNames}\r
+ * @param end the upper bound of the range of ${entity.humanNames} (not inclusive)\r
+ * @return the range of ${tempEntity.humanNames} associated with the ${entity.humanName}\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public List<${tempEntity.packagePath}.model.${tempEntity.name}> get${tempEntity.names}(${entity.PKClassName} pk, int start, int end) throws SystemException {\r
+ return get${tempEntity.names}(pk, start, end, null);\r
+ }\r
+\r
+ public static final FinderPath FINDER_PATH_GET_${tempEntity.names?upper_case} = new FinderPath(\r
+ ${tempEntity.packagePath}.model.impl.${tempEntity.name}ModelImpl.ENTITY_CACHE_ENABLED,\r
+\r
+ <#if column.mappingTable??>\r
+ ${entity.name}ModelImpl.FINDER_CACHE_ENABLED_${stringUtil.upperCase(column.mappingTable)},\r
+ ${tempEntity.packagePath}.model.impl.${tempEntity.name}Impl.class,\r
+ ${entity.name}ModelImpl.MAPPING_TABLE_${stringUtil.upperCase(column.mappingTable)}_NAME,\r
+ <#else>\r
+ ${tempEntity.packagePath}.model.impl.${tempEntity.name}ModelImpl.FINDER_CACHE_ENABLED,\r
+ ${tempEntity.packagePath}.model.impl.${tempEntity.name}Impl.class,\r
+ ${tempEntity.packagePath}.service.persistence.${tempEntity.name}PersistenceImpl.FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION,\r
+ </#if>\r
+\r
+ "get${tempEntity.names}",\r
+ new String[] {\r
+ <#if entity.hasPrimitivePK()>\r
+ ${serviceBuilder.getPrimitiveObj(entity.getPKClassName())}\r
+ <#else>\r
+ ${entity.PKClassName}\r
+ </#if>\r
+\r
+ .class.getName(), "java.lang.Integer", "java.lang.Integer", "com.liferay.portal.kernel.util.OrderByComparator"\r
+ });\r
+\r
+ static {\r
+ FINDER_PATH_GET_${tempEntity.names?upper_case}.setCacheKeyGeneratorCacheName(null);\r
+ }\r
+\r
+ /**\r
+ * Returns an ordered range of all the ${tempEntity.humanNames} associated with the ${entity.humanName}.\r
+ *\r
+ * <p>\r
+ * <#include "range_comment.ftl">\r
+ * </p>\r
+ *\r
+ * @param pk the primary key of the ${entity.humanName}\r
+ * @param start the lower bound of the range of ${entity.humanNames}\r
+ * @param end the upper bound of the range of ${entity.humanNames} (not inclusive)\r
+ * @param orderByComparator the comparator to order the results by (optionally <code>null</code>)\r
+ * @return the ordered range of ${tempEntity.humanNames} associated with the ${entity.humanName}\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public List<${tempEntity.packagePath}.model.${tempEntity.name}> get${tempEntity.names}(${entity.PKClassName} pk, int start, int end, OrderByComparator orderByComparator) throws SystemException {\r
+ Object[] finderArgs = new Object[] {\r
+ pk, start, end, orderByComparator\r
+ };\r
+\r
+ List<${tempEntity.packagePath}.model.${tempEntity.name}> list = (List<${tempEntity.packagePath}.model.${tempEntity.name}>)FinderCacheUtil.getResult(FINDER_PATH_GET_${tempEntity.names?upper_case}, finderArgs, this);\r
+\r
+ if (list == null) {\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ String sql = null;\r
+\r
+ if (orderByComparator != null) {\r
+ sql = _SQL_GET${tempEntity.names?upper_case}.concat(ORDER_BY_CLAUSE).concat(orderByComparator.getOrderBy());\r
+ }\r
+ else {\r
+ <#if tempEntity.getOrder()??>\r
+ sql = _SQL_GET${tempEntity.names?upper_case}.concat(${tempEntity.packagePath}.model.impl.${tempEntity.name}ModelImpl.ORDER_BY_SQL);\r
+ <#else>\r
+ sql = _SQL_GET${tempEntity.names?upper_case};\r
+ </#if>\r
+ }\r
+\r
+ SQLQuery q = session.createSQLQuery(sql);\r
+\r
+ q.addEntity("${tempEntity.table}", ${tempEntity.packagePath}.model.impl.${tempEntity.name}Impl.class);\r
+\r
+ QueryPos qPos = QueryPos.getInstance(q);\r
+\r
+ qPos.add(pk);\r
+\r
+ list = (List<${tempEntity.packagePath}.model.${tempEntity.name}>)QueryUtil.list(q, getDialect(), start, end);\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ if (list == null) {\r
+ FinderCacheUtil.removeResult(FINDER_PATH_GET_${tempEntity.names?upper_case}, finderArgs);\r
+ }\r
+ else {\r
+ ${tempEntity.varName}Persistence.cacheResult(list);\r
+\r
+ FinderCacheUtil.putResult(FINDER_PATH_GET_${tempEntity.names?upper_case}, finderArgs, list);\r
+ }\r
+\r
+ closeSession(session);\r
+ }\r
+ }\r
+\r
+ return list;\r
+ }\r
+\r
+ public static final FinderPath FINDER_PATH_GET_${tempEntity.names?upper_case}_SIZE = new FinderPath(\r
+ ${tempEntity.packagePath}.model.impl.${tempEntity.name}ModelImpl.ENTITY_CACHE_ENABLED,\r
+\r
+ <#if column.mappingTable??>\r
+ ${entity.name}ModelImpl.FINDER_CACHE_ENABLED_${stringUtil.upperCase(column.mappingTable)},\r
+ Long.class,\r
+ ${entity.name}ModelImpl.MAPPING_TABLE_${stringUtil.upperCase(column.mappingTable)}_NAME,\r
+ <#else>\r
+ ${tempEntity.packagePath}.model.impl.${tempEntity.name}ModelImpl.FINDER_CACHE_ENABLED,\r
+ ${tempEntity.packagePath}.model.impl.${tempEntity.name}Impl.class,\r
+ ${tempEntity.packagePath}.service.persistence.${tempEntity.name}PersistenceImpl.FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION,\r
+ </#if>\r
+\r
+ "get${tempEntity.names}Size",\r
+ new String[] {\r
+ <#if entity.hasPrimitivePK()>\r
+ ${serviceBuilder.getPrimitiveObj(entity.getPKClassName())}\r
+ <#else>\r
+ ${entity.PKClassName}\r
+ </#if>\r
+\r
+ .class.getName()\r
+ });\r
+\r
+ static {\r
+ FINDER_PATH_GET_${tempEntity.names?upper_case}_SIZE.setCacheKeyGeneratorCacheName(null);\r
+ }\r
+\r
+ /**\r
+ * Returns the number of ${tempEntity.humanNames} associated with the ${entity.humanName}.\r
+ *\r
+ * @param pk the primary key of the ${entity.humanName}\r
+ * @return the number of ${tempEntity.humanNames} associated with the ${entity.humanName}\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public int get${tempEntity.names}Size(${entity.PKClassName} pk) throws SystemException {\r
+ Object[] finderArgs = new Object[] {pk};\r
+\r
+ Long count = (Long)FinderCacheUtil.getResult(FINDER_PATH_GET_${tempEntity.names?upper_case}_SIZE, finderArgs, this);\r
+\r
+ if (count == null) {\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ SQLQuery q = session.createSQLQuery(_SQL_GET${tempEntity.names?upper_case}SIZE);\r
+\r
+ q.addScalar(COUNT_COLUMN_NAME, com.liferay.portal.kernel.dao.orm.Type.LONG);\r
+\r
+ QueryPos qPos = QueryPos.getInstance(q);\r
+\r
+ qPos.add(pk);\r
+\r
+ count = (Long)q.uniqueResult();\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ if (count == null) {\r
+ count = Long.valueOf(0);\r
+ }\r
+\r
+ FinderCacheUtil.putResult(FINDER_PATH_GET_${tempEntity.names?upper_case}_SIZE, finderArgs, count);\r
+\r
+ closeSession(session);\r
+ }\r
+ }\r
+\r
+ return count.intValue();\r
+ }\r
+\r
+ public static final FinderPath FINDER_PATH_CONTAINS_${tempEntity.name?upper_case} = new FinderPath(\r
+ ${tempEntity.packagePath}.model.impl.${tempEntity.name}ModelImpl.ENTITY_CACHE_ENABLED,\r
+\r
+ <#if column.mappingTable??>\r
+ ${entity.name}ModelImpl.FINDER_CACHE_ENABLED_${stringUtil.upperCase(column.mappingTable)},\r
+ Boolean.class,\r
+ ${entity.name}ModelImpl.MAPPING_TABLE_${stringUtil.upperCase(column.mappingTable)}_NAME,\r
+ <#else>\r
+ ${tempEntity.packagePath}.model.impl.${tempEntity.name}ModelImpl.FINDER_CACHE_ENABLED,\r
+ ${tempEntity.packagePath}.model.impl.${tempEntity.name}Impl.class,\r
+ ${tempEntity.packagePath}.service.persistence.${tempEntity.name}PersistenceImpl.FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION,\r
+ </#if>\r
+\r
+ "contains${tempEntity.name}",\r
+ new String[] {\r
+ <#if entity.hasPrimitivePK()>\r
+ ${serviceBuilder.getPrimitiveObj(entity.getPKClassName())}\r
+ <#else>\r
+ ${entity.PKClassName}\r
+ </#if>\r
+\r
+ .class.getName(),\r
+\r
+ <#if tempEntity.hasPrimitivePK()>\r
+ ${serviceBuilder.getPrimitiveObj(tempEntity.getPKClassName())}\r
+ <#else>\r
+ ${tempEntity.PKClassName}\r
+ </#if>\r
+\r
+ .class.getName()\r
+ });\r
+\r
+ /**\r
+ * Returns <code>true</code> if the ${tempEntity.humanName} is associated with the ${entity.humanName}.\r
+ *\r
+ * @param pk the primary key of the ${entity.humanName}\r
+ * @param ${tempEntity.varName}PK the primary key of the ${tempEntity.humanName}\r
+ * @return <code>true</code> if the ${tempEntity.humanName} is associated with the ${entity.humanName}; <code>false</code> otherwise\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public boolean contains${tempEntity.name}(${entity.PKClassName} pk, ${tempEntity.PKClassName} ${tempEntity.varName}PK) throws SystemException {\r
+ Object[] finderArgs = new Object[] {pk, ${tempEntity.varName}PK};\r
+\r
+ Boolean value = (Boolean)FinderCacheUtil.getResult(FINDER_PATH_CONTAINS_${tempEntity.name?upper_case}, finderArgs, this);\r
+\r
+ if (value == null) {\r
+ try {\r
+ value = Boolean.valueOf(contains${tempEntity.name}.contains(pk, ${tempEntity.varName}PK));\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ if (value == null) {\r
+ value = Boolean.FALSE;\r
+ }\r
+\r
+ FinderCacheUtil.putResult(FINDER_PATH_CONTAINS_${tempEntity.name?upper_case}, finderArgs, value);\r
+ }\r
+ }\r
+\r
+ return value.booleanValue();\r
+ }\r
+\r
+ /**\r
+ * Returns <code>true</code> if the ${entity.humanName} has any ${tempEntity.humanNames} associated with it.\r
+ *\r
+ * @param pk the primary key of the ${entity.humanName} to check for associations with ${tempEntity.humanNames}\r
+ * @return <code>true</code> if the ${entity.humanName} has any ${tempEntity.humanNames} associated with it; <code>false</code> otherwise\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public boolean contains${tempEntity.names}(${entity.PKClassName} pk) throws SystemException {\r
+ if (get${tempEntity.names}Size(pk)> 0) {\r
+ return true;\r
+ }\r
+ else {\r
+ return false;\r
+ }\r
+ }\r
+\r
+ <#if column.isMappingManyToMany()>\r
+ <#assign noSuchTempEntity = serviceBuilder.getNoSuchEntityException(tempEntity)>\r
+\r
+ /**\r
+ * Adds an association between the ${entity.humanName} and the ${tempEntity.humanName}. Also notifies the appropriate model listeners and clears the mapping table finder cache.\r
+ *\r
+ * @param pk the primary key of the ${entity.humanName}\r
+ * @param ${tempEntity.varName}PK the primary key of the ${tempEntity.humanName}\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public void add${tempEntity.name}(${entity.PKClassName} pk, ${tempEntity.PKClassName} ${tempEntity.varName}PK) throws SystemException {\r
+ try {\r
+ add${tempEntity.name}.add(pk, ${tempEntity.varName}PK);\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ FinderCacheUtil.clearCache(${entity.name}ModelImpl.MAPPING_TABLE_${stringUtil.upperCase(column.mappingTable)}_NAME);\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Adds an association between the ${entity.humanName} and the ${tempEntity.humanName}. Also notifies the appropriate model listeners and clears the mapping table finder cache.\r
+ *\r
+ * @param pk the primary key of the ${entity.humanName}\r
+ * @param ${tempEntity.varName} the ${tempEntity.humanName}\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public void add${tempEntity.name}(${entity.PKClassName} pk, ${tempEntity.packagePath}.model.${tempEntity.name} ${tempEntity.varName}) throws SystemException {\r
+ try {\r
+ add${tempEntity.name}.add(pk, ${tempEntity.varName}.getPrimaryKey());\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ FinderCacheUtil.clearCache(${entity.name}ModelImpl.MAPPING_TABLE_${stringUtil.upperCase(column.mappingTable)}_NAME);\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Adds an association between the ${entity.humanName} and the ${tempEntity.humanNames}. Also notifies the appropriate model listeners and clears the mapping table finder cache.\r
+ *\r
+ * @param pk the primary key of the ${entity.humanName}\r
+ * @param ${tempEntity.varName}PKs the primary keys of the ${tempEntity.humanNames}\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public void add${tempEntity.names}(${entity.PKClassName} pk, ${tempEntity.PKClassName}[] ${tempEntity.varName}PKs) throws SystemException {\r
+ try {\r
+ for (${tempEntity.PKClassName} ${tempEntity.varName}PK : ${tempEntity.varName}PKs) {\r
+ add${tempEntity.name}.add(pk, ${tempEntity.varName}PK);\r
+ }\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ FinderCacheUtil.clearCache(${entity.name}ModelImpl.MAPPING_TABLE_${stringUtil.upperCase(column.mappingTable)}_NAME);\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Adds an association between the ${entity.humanName} and the ${tempEntity.humanNames}. Also notifies the appropriate model listeners and clears the mapping table finder cache.\r
+ *\r
+ * @param pk the primary key of the ${entity.humanName}\r
+ * @param ${tempEntity.varNames} the ${tempEntity.humanNames}\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public void add${tempEntity.names}(${entity.PKClassName} pk, List<${tempEntity.packagePath}.model.${tempEntity.name}> ${tempEntity.varNames}) throws SystemException {\r
+ try {\r
+ for (${tempEntity.packagePath}.model.${tempEntity.name} ${tempEntity.varName} : ${tempEntity.varNames}) {\r
+ add${tempEntity.name}.add(pk, ${tempEntity.varName}.getPrimaryKey());\r
+ }\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ FinderCacheUtil.clearCache(${entity.name}ModelImpl.MAPPING_TABLE_${stringUtil.upperCase(column.mappingTable)}_NAME);\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Clears all associations between the ${entity.humanName} and its ${tempEntity.humanNames}. Also notifies the appropriate model listeners and clears the mapping table finder cache.\r
+ *\r
+ * @param pk the primary key of the ${entity.humanName} to clear the associated ${tempEntity.humanNames} from\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public void clear${tempEntity.names}(${entity.PKClassName} pk) throws SystemException {\r
+ try {\r
+ clear${tempEntity.names}.clear(pk);\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ FinderCacheUtil.clearCache(${entity.name}ModelImpl.MAPPING_TABLE_${stringUtil.upperCase(column.mappingTable)}_NAME);\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Removes the association between the ${entity.humanName} and the ${tempEntity.humanName}. Also notifies the appropriate model listeners and clears the mapping table finder cache.\r
+ *\r
+ * @param pk the primary key of the ${entity.humanName}\r
+ * @param ${tempEntity.varName}PK the primary key of the ${tempEntity.humanName}\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public void remove${tempEntity.name}(${entity.PKClassName} pk, ${tempEntity.PKClassName} ${tempEntity.varName}PK) throws SystemException {\r
+ try {\r
+ remove${tempEntity.name}.remove(pk, ${tempEntity.varName}PK);\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ FinderCacheUtil.clearCache(${entity.name}ModelImpl.MAPPING_TABLE_${stringUtil.upperCase(column.mappingTable)}_NAME);\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Removes the association between the ${entity.humanName} and the ${tempEntity.humanName}. Also notifies the appropriate model listeners and clears the mapping table finder cache.\r
+ *\r
+ * @param pk the primary key of the ${entity.humanName}\r
+ * @param ${tempEntity.varName} the ${tempEntity.humanName}\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public void remove${tempEntity.name}(${entity.PKClassName} pk, ${tempEntity.packagePath}.model.${tempEntity.name} ${tempEntity.varName}) throws SystemException {\r
+ try {\r
+ remove${tempEntity.name}.remove(pk, ${tempEntity.varName}.getPrimaryKey());\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ FinderCacheUtil.clearCache(${entity.name}ModelImpl.MAPPING_TABLE_${stringUtil.upperCase(column.mappingTable)}_NAME);\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Removes the association between the ${entity.humanName} and the ${tempEntity.humanNames}. Also notifies the appropriate model listeners and clears the mapping table finder cache.\r
+ *\r
+ * @param pk the primary key of the ${entity.humanName}\r
+ * @param ${tempEntity.varName}PKs the primary keys of the ${tempEntity.humanNames}\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public void remove${tempEntity.names}(${entity.PKClassName} pk, ${tempEntity.PKClassName}[] ${tempEntity.varName}PKs) throws SystemException {\r
+ try {\r
+ for (${tempEntity.PKClassName} ${tempEntity.varName}PK : ${tempEntity.varName}PKs) {\r
+ remove${tempEntity.name}.remove(pk, ${tempEntity.varName}PK);\r
+ }\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ FinderCacheUtil.clearCache(${entity.name}ModelImpl.MAPPING_TABLE_${stringUtil.upperCase(column.mappingTable)}_NAME);\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Removes the association between the ${entity.humanName} and the ${tempEntity.humanNames}. Also notifies the appropriate model listeners and clears the mapping table finder cache.\r
+ *\r
+ * @param pk the primary key of the ${entity.humanName}\r
+ * @param ${tempEntity.varNames} the ${tempEntity.humanNames}\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public void remove${tempEntity.names}(${entity.PKClassName} pk, List<${tempEntity.packagePath}.model.${tempEntity.name}> ${tempEntity.varNames}) throws SystemException {\r
+ try {\r
+ for (${tempEntity.packagePath}.model.${tempEntity.name} ${tempEntity.varName} : ${tempEntity.varNames}) {\r
+ remove${tempEntity.name}.remove(pk, ${tempEntity.varName}.getPrimaryKey());\r
+ }\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ FinderCacheUtil.clearCache(${entity.name}ModelImpl.MAPPING_TABLE_${stringUtil.upperCase(column.mappingTable)}_NAME);\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Sets the ${tempEntity.humanNames} associated with the ${entity.humanName}, removing and adding associations as necessary. Also notifies the appropriate model listeners and clears the mapping table finder cache.\r
+ *\r
+ * @param pk the primary key of the ${entity.humanName}\r
+ * @param ${tempEntity.varName}PKs the primary keys of the ${tempEntity.humanNames} to be associated with the ${entity.humanName}\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public void set${tempEntity.names}(${entity.PKClassName} pk, ${tempEntity.PKClassName}[] ${tempEntity.varName}PKs) throws SystemException {\r
+ try {\r
+ Set<${serviceBuilder.getPrimitiveObj("${tempEntity.PKClassName}")}> ${tempEntity.varName}PKSet = SetUtil.fromArray(${tempEntity.varName}PKs);\r
+\r
+ List<${tempEntity.packagePath}.model.${tempEntity.name}> ${tempEntity.varNames} = get${tempEntity.names}(pk);\r
+\r
+ for (${tempEntity.packagePath}.model.${tempEntity.name} ${tempEntity.varName} : ${tempEntity.varNames}) {\r
+ if (!${tempEntity.varName}PKSet.remove(${tempEntity.varName}.getPrimaryKey())) {\r
+ remove${tempEntity.name}.remove(pk, ${tempEntity.varName}.getPrimaryKey());\r
+ }\r
+ }\r
+\r
+ for (${serviceBuilder.getPrimitiveObj("${tempEntity.PKClassName}")} ${tempEntity.varName}PK : ${tempEntity.varName}PKSet) {\r
+ add${tempEntity.name}.add(pk, ${tempEntity.varName}PK);\r
+ }\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ FinderCacheUtil.clearCache(${entity.name}ModelImpl.MAPPING_TABLE_${stringUtil.upperCase(column.mappingTable)}_NAME);\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Sets the ${tempEntity.humanNames} associated with the ${entity.humanName}, removing and adding associations as necessary. Also notifies the appropriate model listeners and clears the mapping table finder cache.\r
+ *\r
+ * @param pk the primary key of the ${entity.humanName}\r
+ * @param ${tempEntity.varNames} the ${tempEntity.humanNames} to be associated with the ${entity.humanName}\r
+ * @throws SystemException if a system exception occurred\r
+ */\r
+ public void set${tempEntity.names}(${entity.PKClassName} pk, List<${tempEntity.packagePath}.model.${tempEntity.name}> ${tempEntity.varNames}) throws SystemException {\r
+ try {\r
+ ${tempEntity.PKClassName}[] ${tempEntity.varName}PKs = new ${tempEntity.PKClassName}[${tempEntity.varNames}.size()];\r
+\r
+ for (int i = 0; i < ${tempEntity.varNames}.size(); i++) {\r
+ ${tempEntity.packagePath}.model.${tempEntity.name} ${tempEntity.varName} = ${tempEntity.varNames}.get(i);\r
+\r
+ ${tempEntity.varName}PKs[i] = ${tempEntity.varName}.getPrimaryKey();\r
+ }\r
+\r
+ set${tempEntity.names}(pk, ${tempEntity.varName}PKs);\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ FinderCacheUtil.clearCache(${entity.name}ModelImpl.MAPPING_TABLE_${stringUtil.upperCase(column.mappingTable)}_NAME);\r
+ }\r
+ }\r
+ </#if>\r
+ </#if>\r
+ </#list>\r
+\r
+ <#if entity.isHierarchicalTree()>\r
+ /**\r
+ * Rebuilds the ${entity.humanNames} tree for the scope using the modified pre-order tree traversal algorithm.\r
+ *\r
+ * <p>\r
+ * Only call this method if the tree has become stale through operations other than normal CRUD. Under normal circumstances the tree is automatically rebuilt whenver necessary.\r
+ * </p>\r
+ *\r
+ * @param ${scopeColumn.name} the ID of the scope\r
+ * @param force whether to force the rebuild even if the tree is not stale\r
+ */\r
+ public void rebuildTree(long ${scopeColumn.name}, boolean force) throws SystemException {\r
+ if (!rebuildTreeEnabled) {\r
+ return;\r
+ }\r
+\r
+ if (force || (countOrphanTreeNodes(${scopeColumn.name}) > 0)) {\r
+ rebuildTree(${scopeColumn.name}, 0, 1);\r
+\r
+ CacheRegistryUtil.clear(${entity.name}Impl.class.getName());\r
+ EntityCacheUtil.clearCache(${entity.name}Impl.class.getName());\r
+ FinderCacheUtil.clearCache(FINDER_CLASS_NAME_ENTITY);\r
+ FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION);\r
+ }\r
+ }\r
+\r
+ public void setRebuildTreeEnabled(boolean rebuildTreeEnabled) {\r
+ this.rebuildTreeEnabled = rebuildTreeEnabled;\r
+ }\r
+\r
+ protected long countOrphanTreeNodes(long ${scopeColumn.name}) throws SystemException {\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ SQLQuery q = session.createSQLQuery("SELECT COUNT(*) AS COUNT_VALUE FROM ${entity.table} WHERE ${scopeColumn.name} = ? AND (left${pkColumn.methodName} = 0 OR left${pkColumn.methodName} IS NULL OR right${pkColumn.methodName} = 0 OR right${pkColumn.methodName} IS NULL)");\r
+\r
+ q.addScalar(COUNT_COLUMN_NAME, com.liferay.portal.kernel.dao.orm.Type.LONG);\r
+\r
+ QueryPos qPos = QueryPos.getInstance(q);\r
+\r
+ qPos.add(${scopeColumn.name});\r
+\r
+ return (Long)q.uniqueResult();\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ closeSession(session);\r
+ }\r
+ }\r
+\r
+ protected void expandNoChildrenLeft${pkColumn.methodName}(long ${scopeColumn.name}, long left${pkColumn.methodName}, List<Long> children${pkColumn.methodNames}, long delta) {\r
+ String sql = "UPDATE ${entity.table} SET left${entity.PKDBName} = (left${entity.PKDBName} + ?) WHERE (${scopeColumn.DBName} = ?) AND (left${entity.PKDBName} > ?) AND (${entity.PKDBName} NOT IN (" + StringUtil.merge(children${pkColumn.methodNames}) + "))";\r
+\r
+ SqlUpdate _sqlUpdate = SqlUpdateFactoryUtil.getSqlUpdate(getDataSource(), sql, new int[] {java.sql.Types.BIGINT, java.sql.Types.BIGINT, java.sql.Types.BIGINT});\r
+\r
+ _sqlUpdate.update(new Object[] {delta, ${scopeColumn.name}, left${pkColumn.methodName} });\r
+ }\r
+\r
+ protected void expandNoChildrenRight${pkColumn.methodName}(long ${scopeColumn.name}, long right${pkColumn.methodName}, List<Long> children${pkColumn.methodNames}, long delta) {\r
+ String sql = "UPDATE ${entity.table} SET right${entity.PKDBName} = (right${entity.PKDBName} + ?) WHERE (${scopeColumn.DBName} = ?) AND (right${entity.PKDBName} > ?) AND (${entity.PKDBName} NOT IN (" + StringUtil.merge(children${pkColumn.methodNames}) + "))";\r
+\r
+ SqlUpdate _sqlUpdate = SqlUpdateFactoryUtil.getSqlUpdate(getDataSource(), sql, new int[] {java.sql.Types.BIGINT, java.sql.Types.BIGINT, java.sql.Types.BIGINT});\r
+\r
+ _sqlUpdate.update(new Object[] {delta, ${scopeColumn.name}, right${pkColumn.methodName} });\r
+ }\r
+\r
+ protected void expandTree(${entity.name} ${entity.varName}, List<Long> children${pkColumn.methodNames}) throws SystemException {\r
+ if (!rebuildTreeEnabled) {\r
+ return;\r
+ }\r
+\r
+ long ${scopeColumn.name} = ${entity.varName}.get${scopeColumn.methodName}();\r
+\r
+ long lastRight${pkColumn.methodName} = getLastRight${pkColumn.methodName}(${scopeColumn.name}, ${entity.varName}.getParent${pkColumn.methodName}());\r
+\r
+ long left${pkColumn.methodName} = 2;\r
+ long right${pkColumn.methodName} = 3;\r
+\r
+ if (lastRight${pkColumn.methodName} > 0) {\r
+ left${pkColumn.methodName} = lastRight${pkColumn.methodName} + 1;\r
+\r
+ long childrenDistance = ${entity.varName}.getRight${pkColumn.methodName}() - ${entity.varName}.getLeft${pkColumn.methodName}();\r
+\r
+ if (childrenDistance > 1) {\r
+ right${pkColumn.methodName} = left${pkColumn.methodName} + childrenDistance;\r
+\r
+ updateChildrenTree(${scopeColumn.name}, children${pkColumn.methodNames}, left${pkColumn.methodName} - ${entity.varName}.getLeft${pkColumn.methodName}());\r
+\r
+ expandNoChildrenLeft${pkColumn.methodName}(${scopeColumn.name}, lastRight${pkColumn.methodName}, children${pkColumn.methodNames}, childrenDistance + 1);\r
+ expandNoChildrenRight${pkColumn.methodName}(${scopeColumn.name}, lastRight${pkColumn.methodName}, children${pkColumn.methodNames}, childrenDistance + 1);\r
+ }\r
+ else {\r
+ right${pkColumn.methodName} = lastRight${pkColumn.methodName} + 2;\r
+\r
+ expandTreeLeft${pkColumn.methodName}.expand(${scopeColumn.name}, lastRight${pkColumn.methodName});\r
+ expandTreeRight${pkColumn.methodName}.expand(${scopeColumn.name}, lastRight${pkColumn.methodName});\r
+ }\r
+\r
+ CacheRegistryUtil.clear(${entity.name}Impl.class.getName());\r
+ EntityCacheUtil.clearCache(${entity.name}Impl.class.getName());\r
+ FinderCacheUtil.clearCache(FINDER_CLASS_NAME_ENTITY);\r
+ FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION);\r
+ }\r
+\r
+ ${entity.varName}.setLeft${pkColumn.methodName}(left${pkColumn.methodName});\r
+ ${entity.varName}.setRight${pkColumn.methodName}(right${pkColumn.methodName});\r
+ }\r
+\r
+ protected List<Long> getChildrenTree${pkColumn.methodNames}(${entity.name} parent${entity.name}) throws SystemException {\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ SQLQuery q = session.createSQLQuery("SELECT ${entity.PKDBName} FROM ${entity.table} WHERE (${scopeColumn.DBName} = ?) AND (left${entity.PKDBName} BETWEEN ? AND ?)");\r
+\r
+ q.addScalar("${pkColumn.methodName}", com.liferay.portal.kernel.dao.orm.Type.LONG);\r
+\r
+ QueryPos qPos = QueryPos.getInstance(q);\r
+\r
+ qPos.add(parent${entity.name}.get${scopeColumn.methodName}());\r
+ qPos.add(parent${entity.name}.getLeft${pkColumn.methodName}() + 1);\r
+ qPos.add(parent${entity.name}.getRight${pkColumn.methodName}());\r
+\r
+ return q.list();\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ closeSession(session);\r
+ }\r
+ }\r
+\r
+ protected long getLastRight${pkColumn.methodName}(long ${scopeColumn.name}, long parent${pkColumn.methodName}) throws SystemException {\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ SQLQuery q = session.createSQLQuery("SELECT right${pkColumn.methodName} FROM ${entity.table} WHERE (${scopeColumn.DBName} = ?) AND (parent${pkColumn.methodName} = ?) ORDER BY right${pkColumn.methodName} DESC");\r
+\r
+ q.addScalar("right${pkColumn.methodName}", com.liferay.portal.kernel.dao.orm.Type.LONG);\r
+\r
+ QueryPos qPos = QueryPos.getInstance(q);\r
+\r
+ qPos.add(${scopeColumn.name});\r
+ qPos.add(parent${pkColumn.methodName});\r
+\r
+ List<Long> list = (List<Long>)QueryUtil.list(q, getDialect(), 0, 1);\r
+\r
+ if (list.isEmpty()) {\r
+ if (parent${pkColumn.methodName} > 0) {\r
+ session.clear();\r
+\r
+ ${entity.name} parent${entity.name} = findByPrimaryKey(parent${pkColumn.methodName});\r
+\r
+ return parent${entity.name}.getLeft${pkColumn.methodName}();\r
+ }\r
+\r
+ return 0;\r
+ }\r
+ else {\r
+ return list.get(0);\r
+ }\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ closeSession(session);\r
+ }\r
+ }\r
+\r
+ protected long rebuildTree(long ${scopeColumn.name}, long parent${pkColumn.methodName}, long left${pkColumn.methodName}) throws SystemException {\r
+ if (!rebuildTreeEnabled) {\r
+ return 0;\r
+ }\r
+\r
+ List<Long> ${pkColumn.names} = null;\r
+\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ SQLQuery q = session.createSQLQuery("SELECT ${pkColumn.name} FROM ${entity.table} WHERE ${scopeColumn.name} = ? AND parent${pkColumn.methodName} = ? ORDER BY ${pkColumn.name} ASC");\r
+\r
+ q.addScalar("${pkColumn.name}", com.liferay.portal.kernel.dao.orm.Type.LONG);\r
+\r
+ QueryPos qPos = QueryPos.getInstance(q);\r
+\r
+ qPos.add(${scopeColumn.name});\r
+ qPos.add(parent${pkColumn.methodName});\r
+\r
+ ${pkColumn.names} = q.list();\r
+ }\r
+ catch (Exception e) {\r
+ throw processException(e);\r
+ }\r
+ finally {\r
+ closeSession(session);\r
+ }\r
+\r
+ long right${pkColumn.methodName} = left${pkColumn.methodName} + 1;\r
+\r
+ for (long ${pkColumn.name} : ${pkColumn.names}) {\r
+ right${pkColumn.methodName} = rebuildTree(${scopeColumn.name}, ${pkColumn.name}, right${pkColumn.methodName});\r
+ }\r
+\r
+ if (parent${pkColumn.methodName} > 0) {\r
+ updateTree.update(parent${pkColumn.methodName}, left${pkColumn.methodName}, right${pkColumn.methodName});\r
+ }\r
+\r
+ return right${pkColumn.methodName} + 1;\r
+ }\r
+\r
+ protected void shrinkTree(${entity.name} ${entity.varName}) {\r
+ if (!rebuildTreeEnabled) {\r
+ return;\r
+ }\r
+\r
+ long ${scopeColumn.name} = ${entity.varName}.get${scopeColumn.methodName}();\r
+\r
+ long left${pkColumn.methodName} = ${entity.varName}.getLeft${pkColumn.methodName}();\r
+ long right${pkColumn.methodName} = ${entity.varName}.getRight${pkColumn.methodName}();\r
+\r
+ long delta = (right${pkColumn.methodName} - left${pkColumn.methodName}) + 1;\r
+\r
+ shrinkTreeLeft${pkColumn.methodName}.shrink(${scopeColumn.name}, right${pkColumn.methodName}, delta);\r
+ shrinkTreeRight${pkColumn.methodName}.shrink(${scopeColumn.name}, right${pkColumn.methodName}, delta);\r
+\r
+ CacheRegistryUtil.clear(${entity.name}Impl.class.getName());\r
+ EntityCacheUtil.clearCache(${entity.name}Impl.class.getName());\r
+ FinderCacheUtil.clearCache(FINDER_CLASS_NAME_ENTITY);\r
+ FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION);\r
+ }\r
+\r
+ protected void updateChildrenTree(long ${scopeColumn.name}, List<Long> children${pkColumn.methodNames}, long delta) {\r
+ String sql = "UPDATE ${entity.table} SET left${entity.PKDBName} = (left${entity.PKDBName} + ?), right${entity.PKDBName} = (right${entity.PKDBName} + ?) WHERE (${scopeColumn.DBName} = ?) AND (${entity.PKDBName} IN (" + StringUtil.merge(children${pkColumn.methodNames}) + "))";\r
+\r
+ SqlUpdate _sqlUpdate = SqlUpdateFactoryUtil.getSqlUpdate(getDataSource(), sql, new int[] {java.sql.Types.BIGINT, java.sql.Types.BIGINT, java.sql.Types.BIGINT});\r
+\r
+ _sqlUpdate.update(new Object[] {delta, delta, ${scopeColumn.name} });\r
+ }\r
+ </#if>\r
+\r
+ /**\r
+ * Initializes the ${entity.humanName} persistence.\r
+ */\r
+ public void afterPropertiesSet() {\r
+ String[] listenerClassNames = StringUtil.split(GetterUtil.getString(${propsUtil}.get("value.object.listener.${packagePath}.model.${entity.name}")));\r
+\r
+ if (listenerClassNames.length > 0) {\r
+ try {\r
+ List<ModelListener<${entity.name}>> listenersList = new ArrayList<ModelListener<${entity.name}>>();\r
+\r
+ for (String listenerClassName : listenerClassNames) {\r
+ listenersList.add((ModelListener<${entity.name}>)InstanceFactory.newInstance(PortletClassLoaderUtil.getClassLoader(), listenerClassName, (Class<?>[])null, (Object[])null));\r
+ }\r
+\r
+ listeners = listenersList.toArray(new ModelListener[listenersList.size()]);\r
+ }\r
+ catch (Exception e) { \r
+ _log.error(e); \r
+ }\r
+ }\r
+\r
+ <#list entity.columnList as column>\r
+ <#if column.isCollection() && (column.isMappingManyToMany() || column.isMappingOneToMany())>\r
+ <#assign tempEntity = serviceBuilder.getEntity(column.getEJBName())>\r
+\r
+ contains${tempEntity.name} = new Contains${tempEntity.name}();\r
+\r
+ <#if column.isMappingManyToMany()>\r
+ add${tempEntity.name} = new Add${tempEntity.name}();\r
+ clear${tempEntity.names} = new Clear${tempEntity.names}();\r
+ remove${tempEntity.name} = new Remove${tempEntity.name}();\r
+ </#if>\r
+ </#if>\r
+ </#list>\r
+\r
+ <#if entity.isHierarchicalTree()>\r
+ expandTreeLeft${pkColumn.methodName} = new ExpandTreeLeft${pkColumn.methodName}();\r
+ expandTreeRight${pkColumn.methodName} = new ExpandTreeRight${pkColumn.methodName}();\r
+ shrinkTreeLeft${pkColumn.methodName} = new ShrinkTreeLeft${pkColumn.methodName}();\r
+ shrinkTreeRight${pkColumn.methodName} = new ShrinkTreeRight${pkColumn.methodName}();\r
+ updateTree = new UpdateTree();\r
+ </#if>\r
+ }\r
+\r
+ public void destroy() {\r
+ EntityCacheUtil.removeCache(${entity.name}Impl.class.getName());\r
+ FinderCacheUtil.removeCache(FINDER_CLASS_NAME_ENTITY);\r
+ FinderCacheUtil.removeCache(FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION);\r
+ }\r
+\r
+ <#list referenceList as tempEntity>\r
+ <#if tempEntity.hasColumns() && (entity.name == "Counter" || tempEntity.name != "Counter")>\r
+ @BeanReference(type = ${tempEntity.name}Persistence.class)\r
+ protected ${tempEntity.name}Persistence ${tempEntity.varName}Persistence;\r
+ </#if>\r
+ </#list>\r
+\r
+ <#list entity.columnList as column>\r
+ <#if column.isCollection() && (column.isMappingManyToMany() || column.isMappingOneToMany())>\r
+ <#assign tempEntity = serviceBuilder.getEntity(column.getEJBName())>\r
+\r
+ protected Contains${tempEntity.name} contains${tempEntity.name};\r
+\r
+ <#if column.isMappingManyToMany()>\r
+ protected Add${tempEntity.name} add${tempEntity.name};\r
+ protected Clear${tempEntity.names} clear${tempEntity.names};\r
+ protected Remove${tempEntity.name} remove${tempEntity.name};\r
+ </#if>\r
+ </#if>\r
+ </#list>\r
+\r
+ <#list entity.columnList as column>\r
+ <#if column.isCollection() && (column.isMappingManyToMany() || column.isMappingOneToMany())>\r
+ <#assign tempEntity = serviceBuilder.getEntity(column.getEJBName())>\r
+ <#assign entitySqlType = serviceBuilder.getSqlType(packagePath + ".model." + entity.getName(), entity.getPKVarName(), entity.getPKClassName())>\r
+ <#assign tempEntitySqlType = serviceBuilder.getSqlType(tempEntity.getPackagePath() + ".model." + entity.getName(), tempEntity.getPKVarName(), tempEntity.getPKClassName())>\r
+\r
+ <#if entity.hasPrimitivePK()>\r
+ <#assign pkVarNameWrapper = "new " + serviceBuilder.getPrimitiveObj(entity.getPKClassName()) + "("+ entity.getPKVarName() + ")">\r
+ <#else>\r
+ <#assign pkVarNameWrapper = entity.getPKVarName()>\r
+ </#if>\r
+\r
+ <#if tempEntity.hasPrimitivePK()>\r
+ <#assign tempEntityPkVarNameWrapper = "new " + serviceBuilder.getPrimitiveObj(tempEntity.getPKClassName()) + "("+ tempEntity.getPKVarName() + ")">\r
+ <#else>\r
+ <#assign tempEntityPkVarNameWrapper = tempEntity.getPKVarName()>\r
+ </#if>\r
+\r
+ protected class Contains${tempEntity.name} {\r
+\r
+ protected Contains${tempEntity.name}() {\r
+ _mappingSqlQuery = MappingSqlQueryFactoryUtil.getMappingSqlQuery(getDataSource(), _SQL_CONTAINS${tempEntity.name?upper_case}, new int[] {java.sql.Types.${entitySqlType}, java.sql.Types.${tempEntitySqlType}}, RowMapper.COUNT);\r
+ }\r
+\r
+ protected boolean contains(${entity.PKClassName} ${entity.PKVarName}, ${tempEntity.PKClassName} ${tempEntity.PKVarName}) {\r
+ List<Integer> results = _mappingSqlQuery.execute(new Object[] {${pkVarNameWrapper}, ${tempEntityPkVarNameWrapper}});\r
+\r
+ if (results.size()> 0) {\r
+ Integer count = results.get(0);\r
+\r
+ if (count.intValue()> 0) {\r
+ return true;\r
+ }\r
+ }\r
+\r
+ return false;\r
+ }\r
+\r
+ private MappingSqlQuery<Integer> _mappingSqlQuery;\r
+\r
+ }\r
+\r
+ <#if column.isMappingManyToMany()>\r
+ protected class Add${tempEntity.name} {\r
+\r
+ protected Add${tempEntity.name}() {\r
+ _sqlUpdate = SqlUpdateFactoryUtil.getSqlUpdate(getDataSource(), "INSERT INTO ${column.mappingTable} (${entity.PKVarName}, ${tempEntity.PKVarName}) VALUES (?, ?)", new int[] {java.sql.Types.${entitySqlType}, java.sql.Types.${tempEntitySqlType}});\r
+ }\r
+\r
+ protected void add(${entity.PKClassName} ${entity.PKVarName}, ${tempEntity.PKClassName} ${tempEntity.PKVarName}) throws SystemException {\r
+ if (!contains${tempEntity.name}.contains(${entity.PKVarName}, ${tempEntity.PKVarName})) {\r
+ ModelListener<${tempEntity.packagePath}.model.${tempEntity.name}>[] ${tempEntity.varName}Listeners = ${tempEntity.varName}Persistence.getListeners();\r
+\r
+ for (ModelListener<${entity.name}> listener : listeners) {\r
+ listener.onBeforeAddAssociation(${entity.PKVarName}, ${tempEntity.packagePath}.model.${tempEntity.name}.class.getName(), ${tempEntity.PKVarName});\r
+ }\r
+\r
+ for (ModelListener<${tempEntity.packagePath}.model.${tempEntity.name}> listener : ${tempEntity.varName}Listeners) {\r
+ listener.onBeforeAddAssociation(${tempEntity.PKVarName}, ${entity.name}.class.getName(), ${entity.PKVarName});\r
+ }\r
+\r
+ _sqlUpdate.update(new Object[] {${pkVarNameWrapper}, ${tempEntityPkVarNameWrapper}});\r
+\r
+ for (ModelListener<${entity.name}> listener : listeners) {\r
+ listener.onAfterAddAssociation(${entity.PKVarName}, ${tempEntity.packagePath}.model.${tempEntity.name}.class.getName(), ${tempEntity.PKVarName});\r
+ }\r
+\r
+ for (ModelListener<${tempEntity.packagePath}.model.${tempEntity.name}> listener : ${tempEntity.varName}Listeners) {\r
+ listener.onAfterAddAssociation(${tempEntity.PKVarName}, ${entity.name}.class.getName(), ${entity.PKVarName});\r
+ }\r
+ }\r
+ }\r
+\r
+ private SqlUpdate _sqlUpdate;\r
+\r
+ }\r
+\r
+ protected class Clear${tempEntity.names} {\r
+\r
+ protected Clear${tempEntity.names}() {\r
+ _sqlUpdate = SqlUpdateFactoryUtil.getSqlUpdate(getDataSource(), "DELETE FROM ${column.mappingTable} WHERE ${entity.PKVarName} = ?", new int[] {java.sql.Types.${entitySqlType}});\r
+ }\r
+\r
+ protected void clear(${entity.PKClassName} ${entity.PKVarName}) throws SystemException {\r
+ ModelListener<${tempEntity.packagePath}.model.${tempEntity.name}>[] ${tempEntity.varName}Listeners = ${tempEntity.varName}Persistence.getListeners();\r
+\r
+ List<${tempEntity.packagePath}.model.${tempEntity.name}> ${tempEntity.varNames} = null;\r
+\r
+ if ((listeners.length > 0) || (${tempEntity.varName}Listeners.length > 0)) {\r
+ ${tempEntity.varNames} = get${tempEntity.names}(${entity.PKVarName});\r
+\r
+ for (${tempEntity.packagePath}.model.${tempEntity.name} ${tempEntity.varName} : ${tempEntity.varNames}) {\r
+ for (ModelListener<${entity.name}> listener : listeners) {\r
+ listener.onBeforeRemoveAssociation(${entity.PKVarName}, ${tempEntity.packagePath}.model.${tempEntity.name}.class.getName(), ${tempEntity.varName}.getPrimaryKey());\r
+ }\r
+\r
+ for (ModelListener<${tempEntity.packagePath}.model.${tempEntity.name}> listener : ${tempEntity.varName}Listeners) {\r
+ listener.onBeforeRemoveAssociation(${tempEntity.varName}.getPrimaryKey(), ${entity.name}.class.getName(), ${entity.PKVarName});\r
+ }\r
+ }\r
+ }\r
+\r
+ _sqlUpdate.update(new Object[] {${pkVarNameWrapper}});\r
+\r
+ if ((listeners.length > 0) || (${tempEntity.varName}Listeners.length > 0)) {\r
+ for (${tempEntity.packagePath}.model.${tempEntity.name} ${tempEntity.varName} : ${tempEntity.varNames}) {\r
+ for (ModelListener<${entity.name}> listener : listeners) {\r
+ listener.onAfterRemoveAssociation(${entity.PKVarName}, ${tempEntity.packagePath}.model.${tempEntity.name}.class.getName(), ${tempEntity.varName}.getPrimaryKey());\r
+ }\r
+\r
+ for (ModelListener<${tempEntity.packagePath}.model.${tempEntity.name}> listener : ${tempEntity.varName}Listeners) {\r
+ listener.onAfterRemoveAssociation(${tempEntity.varName}.getPrimaryKey(), ${entity.name}.class.getName(), ${entity.PKVarName});\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ private SqlUpdate _sqlUpdate;\r
+\r
+ }\r
+\r
+ protected class Remove${tempEntity.name} {\r
+\r
+ protected Remove${tempEntity.name}() {\r
+ _sqlUpdate = SqlUpdateFactoryUtil.getSqlUpdate(getDataSource(), "DELETE FROM ${column.mappingTable} WHERE ${entity.PKVarName} = ? AND ${tempEntity.PKVarName} = ?", new int[] {java.sql.Types.${entitySqlType}, java.sql.Types.${tempEntitySqlType}});\r
+ }\r
+\r
+ protected void remove(${entity.PKClassName} ${entity.PKVarName}, ${tempEntity.PKClassName} ${tempEntity.PKVarName}) throws SystemException {\r
+ if (contains${tempEntity.name}.contains(${entity.PKVarName}, ${tempEntity.PKVarName})) {\r
+ ModelListener<${tempEntity.packagePath}.model.${tempEntity.name}>[] ${tempEntity.varName}Listeners = ${tempEntity.varName}Persistence.getListeners();\r
+\r
+ for (ModelListener<${entity.name}> listener : listeners) {\r
+ listener.onBeforeRemoveAssociation(${entity.PKVarName}, ${tempEntity.packagePath}.model.${tempEntity.name}.class.getName(), ${tempEntity.PKVarName});\r
+ }\r
+\r
+ for (ModelListener<${tempEntity.packagePath}.model.${tempEntity.name}> listener : ${tempEntity.varName}Listeners) {\r
+ listener.onBeforeRemoveAssociation(${tempEntity.PKVarName}, ${entity.name}.class.getName(), ${entity.PKVarName});\r
+ }\r
+\r
+ _sqlUpdate.update(new Object[] {${pkVarNameWrapper}, ${tempEntityPkVarNameWrapper}});\r
+\r
+ for (ModelListener<${entity.name}> listener : listeners) {\r
+ listener.onAfterRemoveAssociation(${entity.PKVarName}, ${tempEntity.packagePath}.model.${tempEntity.name}.class.getName(), ${tempEntity.PKVarName});\r
+ }\r
+\r
+ for (ModelListener<${tempEntity.packagePath}.model.${tempEntity.name}> listener : ${tempEntity.varName}Listeners) {\r
+ listener.onAfterRemoveAssociation(${tempEntity.PKVarName}, ${entity.name}.class.getName(), ${entity.PKVarName});\r
+ }\r
+ }\r
+ }\r
+\r
+ private SqlUpdate _sqlUpdate;\r
+\r
+ }\r
+ </#if>\r
+ </#if>\r
+ </#list>\r
+\r
+ <#if entity.isHierarchicalTree()>\r
+ protected boolean rebuildTreeEnabled = true;\r
+ protected ExpandTreeLeft${pkColumn.methodName} expandTreeLeft${pkColumn.methodName};\r
+ protected ExpandTreeRight${pkColumn.methodName} expandTreeRight${pkColumn.methodName};\r
+ protected ShrinkTreeLeft${pkColumn.methodName} shrinkTreeLeft${pkColumn.methodName};\r
+ protected ShrinkTreeRight${pkColumn.methodName} shrinkTreeRight${pkColumn.methodName};\r
+ protected UpdateTree updateTree;\r
+\r
+ protected class ExpandTreeLeft${pkColumn.methodName} {\r
+\r
+ protected ExpandTreeLeft${pkColumn.methodName}() {\r
+ _sqlUpdate = SqlUpdateFactoryUtil.getSqlUpdate(getDataSource(), "UPDATE ${entity.table} SET left${pkColumn.methodName} = (left${pkColumn.methodName} + 2) WHERE (${scopeColumn.DBName} = ?) AND (left${pkColumn.methodName} > ?)", new int[] {java.sql.Types.${serviceBuilder.getSqlType("long")}, java.sql.Types.${serviceBuilder.getSqlType("long")}});\r
+ }\r
+\r
+ protected void expand(long ${scopeColumn.name}, long left${pkColumn.methodName}) {\r
+ _sqlUpdate.update(new Object[] {${scopeColumn.name}, left${pkColumn.methodName}});\r
+ }\r
+\r
+ private SqlUpdate _sqlUpdate;\r
+\r
+ }\r
+\r
+ protected class ExpandTreeRight${pkColumn.methodName} {\r
+\r
+ protected ExpandTreeRight${pkColumn.methodName}() {\r
+ _sqlUpdate = SqlUpdateFactoryUtil.getSqlUpdate(getDataSource(), "UPDATE ${entity.table} SET right${pkColumn.methodName} = (right${pkColumn.methodName} + 2) WHERE (${scopeColumn.DBName} = ?) AND (right${pkColumn.methodName} > ?)", new int[] {java.sql.Types.${serviceBuilder.getSqlType("long")}, java.sql.Types.${serviceBuilder.getSqlType("long")}});\r
+ }\r
+\r
+ protected void expand(long ${scopeColumn.name}, long right${pkColumn.methodName}) {\r
+ _sqlUpdate.update(new Object[] {${scopeColumn.name}, right${pkColumn.methodName}});\r
+ }\r
+\r
+ private SqlUpdate _sqlUpdate;\r
+\r
+ }\r
+\r
+ protected class ShrinkTreeLeft${pkColumn.methodName} {\r
+\r
+ protected ShrinkTreeLeft${pkColumn.methodName}() {\r
+ _sqlUpdate = SqlUpdateFactoryUtil.getSqlUpdate(getDataSource(), "UPDATE ${entity.table} SET left${pkColumn.methodName} = (left${pkColumn.methodName} - ?) WHERE (${scopeColumn.DBName} = ?) AND (left${pkColumn.methodName} > ?)", new int[] {java.sql.Types.${serviceBuilder.getSqlType("long")}, java.sql.Types.${serviceBuilder.getSqlType("long")}, java.sql.Types.${serviceBuilder.getSqlType("long")}});\r
+ }\r
+\r
+ protected void shrink(long ${scopeColumn.name}, long left${pkColumn.methodName}, long delta) {\r
+ _sqlUpdate.update(new Object[] {delta, ${scopeColumn.name}, left${pkColumn.methodName}});\r
+ }\r
+\r
+ private SqlUpdate _sqlUpdate;\r
+\r
+ }\r
+\r
+ protected class ShrinkTreeRight${pkColumn.methodName} {\r
+\r
+ protected ShrinkTreeRight${pkColumn.methodName}() {\r
+ _sqlUpdate = SqlUpdateFactoryUtil.getSqlUpdate(getDataSource(), "UPDATE ${entity.table} SET right${pkColumn.methodName} = (right${pkColumn.methodName} - ?) WHERE (${scopeColumn.DBName} = ?) AND (right${pkColumn.methodName} > ?)", new int[] {java.sql.Types.${serviceBuilder.getSqlType("long")}, java.sql.Types.${serviceBuilder.getSqlType("long")}, java.sql.Types.${serviceBuilder.getSqlType("long")}});\r
+ }\r
+\r
+ protected void shrink(long ${scopeColumn.name}, long right${pkColumn.methodName}, long delta) {\r
+ _sqlUpdate.update(new Object[] {delta, ${scopeColumn.name}, right${pkColumn.methodName}});\r
+ }\r
+\r
+ private SqlUpdate _sqlUpdate;\r
+\r
+ }\r
+\r
+ protected class UpdateTree {\r
+\r
+ protected UpdateTree() {\r
+ _sqlUpdate = SqlUpdateFactoryUtil.getSqlUpdate(getDataSource(), "UPDATE ${entity.table} SET left${pkColumn.methodName} = ?, right${pkColumn.methodName} = ? WHERE ${pkColumn.name} = ?", new int[] {java.sql.Types.${serviceBuilder.getSqlType("long")}, java.sql.Types.${serviceBuilder.getSqlType("long")}, java.sql.Types.${serviceBuilder.getSqlType("long")}});\r
+ }\r
+\r
+ protected void update(long ${pkColumn.name}, long left${pkColumn.methodName}, long right${pkColumn.methodName}) {\r
+ _sqlUpdate.update(new Object[] {left${pkColumn.methodName}, right${pkColumn.methodName}, ${pkColumn.name}});\r
+ }\r
+\r
+ private SqlUpdate _sqlUpdate;\r
+\r
+ }\r
+ </#if>\r
+\r
+ private static final String _SQL_SELECT_${entity.alias?upper_case} = "SELECT ${entity.alias} FROM ${entity.name} ${entity.alias}";\r
+\r
+ <#if entity.getFinderList()?size != 0>\r
+ private static final String _SQL_SELECT_${entity.alias?upper_case}_WHERE = "SELECT ${entity.alias} FROM ${entity.name} ${entity.alias} WHERE ";\r
+ </#if>\r
+\r
+ private static final String _SQL_COUNT_${entity.alias?upper_case} = "SELECT COUNT(${entity.alias}) FROM ${entity.name} ${entity.alias}";\r
+\r
+ <#if entity.getFinderList()?size != 0>\r
+ private static final String _SQL_COUNT_${entity.alias?upper_case}_WHERE = "SELECT COUNT(${entity.alias}) FROM ${entity.name} ${entity.alias} WHERE ";\r
+ </#if>\r
+\r
+ <#list entity.columnList as column>\r
+ <#if column.isCollection()>\r
+ <#assign tempEntity = serviceBuilder.getEntity(column.getEJBName())>\r
+\r
+ <#if column.isMappingManyToMany()>\r
+ private static final String _SQL_GET${tempEntity.names?upper_case} = "SELECT {${tempEntity.table}.*} FROM ${tempEntity.table} INNER JOIN ${column.mappingTable} ON (${column.mappingTable}.${tempEntity.PKDBName} = ${tempEntity.table}.${tempEntity.PKDBName}) WHERE (${column.mappingTable}.${entity.PKDBName} = ?)";\r
+\r
+ private static final String _SQL_GET${tempEntity.names?upper_case}SIZE = "SELECT COUNT(*) AS COUNT_VALUE FROM ${column.mappingTable} WHERE ${entity.PKDBName} = ?";\r
+\r
+ private static final String _SQL_CONTAINS${tempEntity.name?upper_case} = "SELECT COUNT(*) AS COUNT_VALUE FROM ${column.mappingTable} WHERE ${entity.PKDBName} = ? AND ${tempEntity.PKDBName} = ?";\r
+ <#elseif column.isMappingOneToMany()>\r
+ private static final String _SQL_GET${tempEntity.names?upper_case} = "SELECT {${tempEntity.table}.*} FROM ${tempEntity.table} INNER JOIN ${entity.table} ON (${entity.table}.${entity.PKDBName} = ${tempEntity.table}.${entity.PKDBName}) WHERE (${entity.table}.${entity.PKDBName} = ?)";\r
+\r
+ private static final String _SQL_GET${tempEntity.names?upper_case}SIZE = "SELECT COUNT(*) AS COUNT_VALUE FROM ${tempEntity.table} WHERE ${entity.PKDBName} = ?";\r
+\r
+ private static final String _SQL_CONTAINS${tempEntity.name?upper_case} = "SELECT COUNT(*) AS COUNT_VALUE FROM ${tempEntity.table} WHERE ${entity.PKDBName} = ? AND ${tempEntity.PKDBName} = ?";\r
+ </#if>\r
+ </#if>\r
+ </#list>\r
+\r
+ <#list entity.getFinderList() as finder>\r
+ <#assign finderColsList = finder.getColumns()>\r
+\r
+ <#list finderColsList as finderCol>\r
+ <#assign finderColConjunction = "">\r
+\r
+ <#if finderCol_has_next>\r
+ <#assign finderColConjunction = " AND ">\r
+ <#elseif finder.where?? && validator.isNotNull(finder.getWhere())>\r
+ <#assign finderColConjunction = " AND " + finder.where>\r
+ </#if>\r
+\r
+ <#if !finderCol.isPrimitiveType()>\r
+ private static final String _FINDER_COLUMN_${finder.name?upper_case}_${finderCol.name?upper_case}_1 =\r
+\r
+ <#if finderCol.comparator == "=">\r
+ "${entity.alias}<#if entity.hasCompoundPK() && finderCol.isPrimary()>.id</#if>.${finderCol.name} IS NULL${finderColConjunction}"\r
+ <#elseif finderCol.comparator == "<>" || finderCol.comparator = "!=">\r
+ "${entity.alias}<#if entity.hasCompoundPK() && finderCol.isPrimary()>.id</#if>.${finderCol.name} IS NOT NULL${finderColConjunction}"\r
+ <#else>\r
+ "${entity.alias}<#if entity.hasCompoundPK() && finderCol.isPrimary()>.id</#if>.${finderCol.name} ${finderCol.comparator} NULL${finderColConjunction}"\r
+ </#if>\r
+\r
+ ;\r
+ </#if>\r
+\r
+ <#if finderCol.type == "String" && !finderCol.isCaseSensitive()>\r
+ <#if entity.hasCompoundPK() && finderCol.isPrimary()>\r
+ <#assign finderColExpression = "lower(" + entity.alias + ".id." + finderCol.name + ") " + finderCol.comparator + " lower(CAST_TEXT(?))">\r
+ <#else>\r
+ <#assign finderColExpression = "lower(" + entity.alias + "." + finderCol.name + ") " + finderCol.comparator + " lower(CAST_TEXT(?))">\r
+ </#if>\r
+ <#else>\r
+ <#if entity.hasCompoundPK() && finderCol.isPrimary()>\r
+ <#assign finderColExpression = entity.alias + ".id." + finderCol.name + " " + finderCol.comparator + " ?">\r
+ <#else>\r
+ <#assign finderColExpression = entity.alias + "." + finderCol.name + " " + finderCol.comparator + " ?">\r
+ </#if>\r
+ </#if>\r
+\r
+ private static final String _FINDER_COLUMN_${finder.name?upper_case}_${finderCol.name?upper_case}_2 = "${finderColExpression}${finderColConjunction}";\r
+\r
+ <#if finderCol.type == "String">\r
+ private static final String _FINDER_COLUMN_${finder.name?upper_case}_${finderCol.name?upper_case}_3 = "(${entity.alias}<#if entity.hasCompoundPK() && finderCol.isPrimary()>.id</#if>.${finderCol.name} IS NULL OR ${finderColExpression})${finderColConjunction}";\r
+ </#if>\r
+\r
+ <#if finder.hasArrayableOperator()>\r
+ <#if !finderCol.isPrimitiveType()>\r
+ private static final String _FINDER_COLUMN_${finder.name?upper_case}_${finderCol.name?upper_case}_4 = "(" + _removeConjunction(_FINDER_COLUMN_${finder.name?upper_case}_${finderCol.name?upper_case}_1) + ")";\r
+ </#if>\r
+\r
+ private static final String _FINDER_COLUMN_${finder.name?upper_case}_${finderCol.name?upper_case}_5 = "(" + _removeConjunction(_FINDER_COLUMN_${finder.name?upper_case}_${finderCol.name?upper_case}_2) + ")";\r
+\r
+ <#if finderCol.type == "String">\r
+ private static final String _FINDER_COLUMN_${finder.name?upper_case}_${finderCol.name?upper_case}_6 = "(" + _removeConjunction(_FINDER_COLUMN_${finder.name?upper_case}_${finderCol.name?upper_case}_3) + ")";\r
+ </#if>\r
+ </#if>\r
+ </#list>\r
+ </#list>\r
+\r
+ <#if entity.hasArrayableOperator()>\r
+ private static String _removeConjunction(String sql) {\r
+ int pos = sql.indexOf(" AND ");\r
+\r
+ if (pos != -1) {\r
+ sql = sql.substring(0, pos);\r
+ }\r
+\r
+ return sql;\r
+ }\r
+ </#if>\r
+\r
+ <#if entity.isPermissionCheckEnabled()>\r
+ private static final String _FILTER_ENTITY_TABLE_FILTER_PK_COLUMN = "${entity.alias}.${entity.filterPKColumn.DBName}";\r
+\r
+ <#if entity.isPermissionedModel()>\r
+ <#if entity.hasColumn("userId") >\r
+ private static final String _FILTER_ENTITY_TABLE_FILTER_USERID_COLUMN = "${entity.alias}.userId";\r
+ <#else>\r
+ private static final String _FILTER_ENTITY_TABLE_FILTER_USERID_COLUMN = null;\r
+ </#if>\r
+ <#else>\r
+ private static final String _FILTER_SQL_SELECT_${entity.alias?upper_case}_WHERE = "SELECT DISTINCT {${entity.alias}.*} FROM ${entity.table} ${entity.alias} WHERE ";\r
+\r
+ private static final String _FILTER_SQL_SELECT_${entity.alias?upper_case}_NO_INLINE_DISTINCT_WHERE_1 = "SELECT {${entity.table}.*} FROM (SELECT DISTINCT ${entity.alias}.${entity.PKDBName} FROM ${entity.table} ${entity.alias} WHERE ";\r
+\r
+ private static final String _FILTER_SQL_SELECT_${entity.alias?upper_case}_NO_INLINE_DISTINCT_WHERE_2 = ") TEMP_TABLE INNER JOIN ${entity.table} ON TEMP_TABLE.${entity.PKDBName} = ${entity.table}.${entity.PKDBName}";\r
+\r
+ private static final String _FILTER_SQL_COUNT_${entity.alias?upper_case}_WHERE = "SELECT COUNT(DISTINCT ${entity.alias}.${entity.PKDBName}) AS COUNT_VALUE FROM ${entity.table} ${entity.alias} WHERE ";\r
+\r
+ private static final String _FILTER_ENTITY_ALIAS = "${entity.alias}";\r
+\r
+ private static final String _FILTER_ENTITY_TABLE = "${entity.table}";\r
+ </#if>\r
+ </#if>\r
+\r
+ private static final String _ORDER_BY_ENTITY_ALIAS = "${entity.alias}.";\r
+\r
+ <#if entity.isPermissionCheckEnabled() && !entity.isPermissionedModel()>\r
+ private static final String _ORDER_BY_ENTITY_TABLE = "${entity.table}.";\r
+ </#if>\r
+\r
+ private static final String _NO_SUCH_ENTITY_WITH_PRIMARY_KEY = "No ${entity.name} exists with the primary key ";\r
+\r
+ <#if entity.getFinderList()?size != 0>\r
+ private static final String _NO_SUCH_ENTITY_WITH_KEY = "No ${entity.name} exists with the key {";\r
+ </#if>\r
+\r
+ private static final boolean _HIBERNATE_CACHE_USE_SECOND_LEVEL_CACHE = <#if pluginName != "">GetterUtil.getBoolean(PropsUtil.get(PropsKeys.HIBERNATE_CACHE_USE_SECOND_LEVEL_CACHE))<#else>com.liferay.portal.util.PropsValues.HIBERNATE_CACHE_USE_SECOND_LEVEL_CACHE</#if>;\r
+\r
+ private static Log _log = LogFactoryUtil.getLog(${entity.name}PersistenceImpl.class);\r
+\r
+ private static ${entity.name} _null${entity.name} = new ${entity.name}Impl() {\r
+\r
+ @Override\r
+ public Object clone() {\r
+ return this;\r
+ }\r
+\r
+ @Override\r
+ public CacheModel<${entity.name}> toCacheModel() {\r
+ return _null${entity.name}CacheModel;\r
+ }\r
+\r
+ };\r
+\r
+ private static CacheModel<${entity.name}> _null${entity.name}CacheModel = new CacheModel<${entity.name}>() {\r
+ public ${entity.name} toEntityModel() {\r
+ return _null${entity.name};\r
+ }\r
+ };\r
+\r
+}
\ No newline at end of file