@SuppressWarnings("unchecked") static <T> Expression<T> toExpressionRecursively(From<?, ?> from, PropertyPath property, boolean isForSelection) { Bindable<?> propertyPathModel; Bindable<?> model = from.getModel(); String segment = property.getSegment(); if (model instanceof ManagedType) { /* * Required to keep support for EclipseLink 2.4.x. TODO: Remove once we drop that (probably Dijkstra M1) * See: https://bugs.eclipse.org/bugs/show_bug.cgi?id=413892 */ propertyPathModel = (Bindable<?>) ((ManagedType<?>) model).getAttribute(segment); } else { propertyPathModel = from.get(segment).getModel(); } if (requiresJoin(propertyPathModel, model instanceof PluralAttribute, !property.hasNext(), isForSelection) && !isAlreadyFetched(from, segment)) { Join<?, ?> join = getOrCreateJoin(from, segment); return (Expression<T>) (property.hasNext() ? toExpressionRecursively(join, property.next(), isForSelection) : join); } else { Path<Object> path = from.get(segment); return (Expression<T>) (property.hasNext() ? toExpressionRecursively(path, property.next()) : path); } }
private static Object getValueForPath(Path path, String value) { if (value == null) return null; Class c = path.getModel().getBindableJavaType(); try { if (c.equals(Date.class)) return Date.from(ZonedDateTime.parse(value).toInstant()); if (c.equals(Instant.class)) return ZonedDateTime.parse(value).toInstant(); if (c.equals(Boolean.class)) return Boolean.parseBoolean(value); if (c.isEnum()) return Enum.valueOf(c, value); if (c.equals(UUID.class)) return UUID.fromString(value); } catch (IllegalArgumentException | DateTimeParseException e) { throw new InvalidFieldValueException(e.getMessage(), path.getAlias(), value); } return value; }
/** * Returns whether given path is {@link Enumerated} by {@link EnumType#ORDINAL}. * @param path Path of interest. * @return Whether given path is {@link Enumerated} by {@link EnumType#ORDINAL}. */ public static boolean isEnumeratedByOrdinal(Path<?> path) { Bindable<?> model = path.getModel(); if (model instanceof Attribute) { Member member = ((Attribute<?, ?>) model).getJavaMember(); if (member instanceof AnnotatedElement) { Enumerated enumerated = ((AnnotatedElement) member).getAnnotation(Enumerated.class); if (enumerated != null) { return enumerated.value() == EnumType.ORDINAL; } } } return false; }
private void pathMustBeChildOfRoot(Path<?> attribute) { Arguments.mustBeInstanceOfValue("attribute.getModel()", attribute.getModel(), SingularAttribute.class); for (Path<?> parent = attribute.getParentPath(); parent != null; parent = parent.getParentPath()) { if (parent == this.root) { return; } } throw new IllegalArgumentException(pathMustBeChildOfRoot(this.getClass())); }
if (depth == 1 && isTransient(path.getModel().getBindableJavaType(), attribute)) { path = guessManyOrOneToOnePath(attribute);
private static CriteriaField getCriteriaField(String fieldName, Root<?> r) { if (fieldName == null) fieldName = ""; String fields[] = fieldName.split("\\."); From from = r; Path path = r; Boolean containsToMany = false; for (String field : fields) { path = from.get(field); if (path.getModel() == null && (path.getJavaType().equals(List.class) || path.getJavaType().equals(Set.class))) { containsToMany = true; from = from.join(field); } else { switch (((Attribute) path.getModel()).getPersistentAttributeType()) { case ONE_TO_MANY: case MANY_TO_MANY: containsToMany = true; case ONE_TO_ONE: case MANY_TO_ONE: case EMBEDDED: from = from.join(field); break; } } } return new CriteriaField(path, containsToMany); }
public <E> Predicate byExampleOnEmbeddable(Path<E> embeddablePath, E embeddableValue, SearchParameters sp, CriteriaBuilder builder) { if (embeddableValue == null) { return null; } Class<E> type = embeddablePath.getModel().getBindableJavaType(); ManagedType<E> mt = em.getMetamodel().embeddable(type); // note: calling .managedType() does not work return jpaUtil.orPredicate(builder, byExample(mt, embeddablePath, embeddableValue, sp, builder)); }
public <E> Predicate byExampleOnEmbeddable(Path<E> embeddablePath, E embeddableValue, SearchParameters sp, CriteriaBuilder builder) { if (embeddableValue == null) { return null; } Class<E> type = embeddablePath.getModel().getBindableJavaType(); ManagedType<E> mt = em.getMetamodel().embeddable(type); // note: calling .managedType() does not work return jpaUtil.andPredicate(builder, byExample(mt, embeddablePath, embeddableValue, sp, builder)); }
public <E> Predicate byExampleOnEmbeddable(Path<E> embeddablePath, E embeddableValue, SearchParameters sp, CriteriaBuilder builder) { if (embeddableValue == null) { return null; } Class<E> type = embeddablePath.getModel().getBindableJavaType(); ManagedType<E> mt = em.getMetamodel().embeddable(type); // note: calling .managedType() does not work return jpaUtil.andPredicate(builder, byExample(mt, embeddablePath, embeddableValue, sp, builder)); }
public static boolean containsRelation(Object expr) { if (expr instanceof Join) { return true; } else if (expr instanceof SingularAttribute) { SingularAttribute<?, ?> attr = (SingularAttribute<?, ?>) expr; return attr.isAssociation(); } else if (expr instanceof Path) { Path<?> attrPath = (Path<?>) expr; Bindable<?> model = attrPath.getModel(); Path<?> parent = attrPath.getParentPath(); return containsRelation(parent) || containsRelation(model); } else { // we may can do better here... return false; } }
public <E> Predicate byExampleOnEmbeddable(Path<E> embeddablePath, E embeddableValue, SearchParameters sp, CriteriaBuilder builder) { if (embeddableValue == null) { return null; } Class<E> type = embeddablePath.getModel().getBindableJavaType(); ManagedType<E> mt = em.getMetamodel().embeddable(type); // note: calling .managedType() does not work return jpaUtil.orPredicate(builder, byExample(mt, embeddablePath, embeddableValue, sp, builder)); }
if(fieldPath.getModel() instanceof SingularAttribute) { if (fieldPath.getModel() instanceof SingularAttribute) { SingularAttribute<?,?> attribute = (SingularAttribute<?,?>) fieldPath.getModel(); if (attribute.getPersistentAttributeType() == Attribute.PersistentAttributeType.MANY_TO_ONE || attribute.getPersistentAttributeType() == Attribute.PersistentAttributeType.ONE_TO_ONE
if(field.getModel() == null) return from.join(filter.getField()).in(value); } else if(type.isEnum()) {
@SuppressWarnings("unchecked") static <T> Expression<T> toExpressionRecursively(From<?, ?> from, PropertyPath property, boolean isForSelection) { Bindable<?> propertyPathModel; Bindable<?> model = from.getModel(); String segment = property.getSegment(); if (model instanceof ManagedType) { /* * Required to keep support for EclipseLink 2.4.x. TODO: Remove once we drop that (probably Dijkstra M1) * See: https://bugs.eclipse.org/bugs/show_bug.cgi?id=413892 */ propertyPathModel = (Bindable<?>) ((ManagedType<?>) model).getAttribute(segment); } else { propertyPathModel = from.get(segment).getModel(); } if (requiresJoin(propertyPathModel, model instanceof PluralAttribute, !property.hasNext(), isForSelection) && !isAlreadyFetched(from, segment)) { Join<?, ?> join = getOrCreateJoin(from, segment); return (Expression<T>) (property.hasNext() ? toExpressionRecursively(join, property.next(), isForSelection) : join); } else { Path<Object> path = from.get(segment); return (Expression<T>) (property.hasNext() ? toExpressionRecursively(path, property.next()) : path); } }
if (path.getModel() instanceof SingularAttribute<?, ?>) { SingularAttribute<?, ?> attribute = (SingularAttribute<?, ?>)path.getModel(); if (attribute.isId()) { if (path.getParentPath() instanceof Join<?, ?>) { Attribute<?, ?> attribute = (Attribute<?, ?>)path.getModel(); if (attribute != null) { if (!leaf || directlyReferencedByTopmostSelection) {