/** * 一対多の関連を処理します。 * * @param propertyMeta プロパティメタデータ * @param field フィールド * @param entityMeta エンティティメタデータ * @param oneToMany 一対多関連 */ protected void doOneToMany( PropertyMeta propertyMeta, Field field, EntityMeta entityMeta, OneToMany oneToMany) { propertyMeta.setRelationshipType(RelationshipType.ONE_TO_MANY); if (!List.class.isAssignableFrom(field.getType())) { throw new OneToManyNotListRuntimeException(entityMeta.getName(), propertyMeta.getName()); } Class<?> relationshipClass = ReflectionUtil.getElementTypeOfList(field.getGenericType()); if (relationshipClass == null) { throw new OneToManyNotGenericsRuntimeException(entityMeta.getName(), propertyMeta.getName()); } if (relationshipClass.getAnnotation(Entity.class) == null) { throw new RelationshipNotEntityRuntimeException( entityMeta.getName(), propertyMeta.getName(), relationshipClass); } propertyMeta.setRelationshipClass(relationshipClass); String mappedBy = oneToMany.mappedBy(); if (!StringUtil.isEmpty(mappedBy)) { if (propertyMeta.getJoinColumnMetaList().size() > 0) { throw new BothMappedByAndJoinColumnRuntimeException( entityMeta.getName(), propertyMeta.getName()); } propertyMeta.setMappedBy(mappedBy); } else { throw new MappedByMandatoryRuntimeException(entityMeta.getName(), propertyMeta.getName()); } }
/** * 関連用のクラスを返します。 * * @param propertyMeta プロパティメタデータ * @param field フィールド * @param entityMeta エンティティメタデータ * @return 関連用のクラス * @throws OneToManyNotGenericsRuntimeException 一対多の関連がジェネリクスのリストではない場合。 */ protected Class<?> getRelationshipClass( PropertyMeta propertyMeta, Field field, EntityMeta entityMeta) throws OneToManyNotGenericsRuntimeException { Class<?> clazz = field.getType(); if (List.class.isAssignableFrom(clazz)) { clazz = ReflectionUtil.getElementTypeOfList(field.getGenericType()); if (clazz == null) { throw new OneToManyNotGenericsRuntimeException( entityMeta.getName(), propertyMeta.getName()); } } return clazz; }
public void init(FilterConfig config) throws ServletException { String access = config.getInitParameter("jspDirectAccess"); if (StringUtil.isNotBlank(access)) { jspDirectAccess = Boolean.valueOf(access); } String routesPath = config.getInitParameter("routes"); if (StringUtil.isNotEmpty(routesPath)) { String realRoutesPath = config.getServletContext().getRealPath(routesPath); if (realRoutesPath != null) { routes = new File(realRoutesPath); } InputStream routesStream = config.getServletContext().getResourceAsStream(routesPath); try { Routes.load(routesStream); } finally { InputStreamUtil.close(routesStream); } lastLoaded = System.currentTimeMillis(); } String interval = config.getInitParameter("checkInterval"); if (StringUtil.isNotEmpty(interval)) { checkInterval = LongConversionUtil.toLong(interval); } if (checkInterval == null || checkInterval < 0) { checkInterval = -1L; } String contextSensitiveParam = config.getInitParameter("contextSensitive"); if (StringUtil.isNotBlank(contextSensitiveParam)) { contextSensitive = Boolean.valueOf(contextSensitiveParam); } if (contextSensitive) { try { Method getContextPath = ReflectionUtil.getMethod(ServletContext.class, "getContextPath"); UrlRewriter.contextPath = (String) MethodUtil.invoke(getContextPath, config.getServletContext(), null); } catch (NoSuchMethodRuntimeException e) { UrlRewriter.contextPath = config.getServletContext().getServletContextName(); } } requestUriHeader = config.getInitParameter("requestUriHeader"); String fallThroughParam = config.getInitParameter("fallThrough"); if (StringUtil.isNotBlank(fallThroughParam)) { fallThrough = Boolean.valueOf(fallThroughParam); } }