@Override public <Y> SingularAttribute<? super X, Y> getId(Class<Y> paramClass) { if (idAttribute != null) { if (idAttribute.getJavaType().equals(paramClass) && !isIdClass) { return (SingularAttribute<? super X, Y>) idAttribute; } else { onError(); } } else { AbstractIdentifiableType<? super X> superType = (AbstractIdentifiableType<? super X>) getSupertype(); if (superType != null) { return superType.getId(paramClass); } } onError(); return null; }
public SingularAttribute<? super X, ?> getIdAttribute() { idAttribute = idAttribute == null ? getSuperClazzType() != null /* * && getSuperClazzType().getJavaType().isAssignableFrom( * AbstractIdentifiableType.class) */? ((AbstractIdentifiableType) getSuperClazzType()).getIdAttribute() : null : idAttribute; return idAttribute; }
@Override public Set<SingularAttribute<? super X, ?>> getIdClassAttributes() { if (isIdClass) { return idClassAttributes; } else if (getSuperClazzType() != null /* * && getSuperClazzType().getJavaType().isAssignableFrom( * AbstractIdentifiableType.class) */) { idClassAttributes = ((AbstractIdentifiableType) getSuperClazzType()).getIdClassAttributes(); } throw new IllegalArgumentException("The identifiable type does not have an id class"); }
Assert.assertTrue(((AbstractIdentifiableType<X>) managedType).hasSingleIdAttribute()); SingularAttribute<? super X, Integer> idAttribute = ((AbstractIdentifiableType<X>) managedType).getId(clazz); .getDeclaredId(clazz); Assert.assertEquals(clazz, idAttributeDeclared.getJavaType()); Type<?> idType = ((AbstractIdentifiableType<X>) managedType).getIdType(); Assert.assertNotNull(idType); IdentifiableType<? super X> idIdentifiableType = ((AbstractIdentifiableType<X>) managedType).getSupertype(); Assert.assertNull(idIdentifiableType);
@Override public Type<?> getIdType() { if (idAttribute != null && !isIdClass) { return idAttribute.getType(); } return getSupertype().getIdType(); }
/** * On embedded id test. * * @param <X> * the generic type * @param <T> * the generic type */ private <X> void illeagaltypesTest(AbstractManagedType<X> managedType) { try { SingularAttribute<? super X, Double> idNullAttribute = ((AbstractIdentifiableType<X>) managedType) .getId(Double.class); } catch (IllegalArgumentException e) { Assert.fail(e.getMessage()); } }
@Override public boolean hasSingleIdAttribute() { return !isIdClass && getIdAttribute() != null; }
@Override public Class<X> getBindableJavaType() { return super.getJavaType(); }
/** * * @param metadata * @param clazz * @param metaModelBuilder */ private <X, T> void validateandSetEntityType(EntityMetadata metadata, Class<X> clazz, MetaModelBuilder<X, T> metaModelBuilder) { if (metadata.getType() == null && clazz != null && !clazz.equals(Object.class) && clazz.isAnnotationPresent(javax.persistence.Entity.class)) { EntityType entityType = (EntityType) metaModelBuilder.getManagedTypes().get(clazz); if (entityType.getSupertype() != null) { Set<Attribute> attributes = ((AbstractIdentifiableType) entityType.getSupertype()).getAttributes(); Iterator<Attribute> iter = attributes.iterator(); while (iter.hasNext()) { Attribute attribute = iter.next(); Field f = (Field) ((Field) attribute.getJavaMember()); onFamilyType(metadata, clazz, f); } } validateandSetEntityType(metadata, (Class<X>) clazz.getSuperclass(), metaModelBuilder); } }
/** * * @param metadata * @param clazz * @param metaModelBuilder */ private <X, T> void validateAndSetId(EntityMetadata metadata, Class<X> clazz, MetaModelBuilder<X, T> metaModelBuilder) { if (metadata.getIdAttribute() == null) { EntityType entityType = (EntityType) metaModelBuilder.getManagedTypes().get(clazz); if (entityType.getSupertype() != null) { Attribute idAttribute = ((AbstractIdentifiableType) entityType.getSupertype()).getIdAttribute(); metadata.setIdAttribute((SingularAttribute) idAttribute); populateIdAccessorMethods(metadata, clazz, (Field) idAttribute.getJavaMember()); } } validateIdAttribute(metadata.getIdAttribute(), clazz); }