예제 #1
0
        /** {@inheritDoc} */
        public Member resolveMember(AttributeContext attributeContext) {
          final IdentifiableType identifiableType =
              (IdentifiableType) attributeContext.getOwnerType();
          final EntityMetamodel entityMetamodel = getDeclarerEntityMetamodel(identifiableType);
          if (!entityMetamodel.getIdentifierProperty().isVirtual()) {
            throw new IllegalArgumentException("expecting IdClass mapping");
          }
          org.hibernate.type.Type type = entityMetamodel.getIdentifierProperty().getType();
          if (!EmbeddedComponentType.class.isInstance(type)) {
            throw new IllegalArgumentException("expecting IdClass mapping");
          }

          final EmbeddedComponentType componentType = (EmbeddedComponentType) type;
          final String attributeName = attributeContext.getPropertyMapping().getName();
          return componentType
              .getComponentTuplizer()
              .getGetter(componentType.getPropertyIndex(attributeName))
              .getMember();
        }
예제 #2
0
    /**
     * examines all {@link Type types} for this class and stores pointers to those fields which
     * represent {@link IObject} instances. These fields may need to be locked when an object of
     * this type is created or updated.
     */
    Locks(ClassMetadata classMetadata) {

      this.cm = classMetadata;
      String[] name = cm.getPropertyNames();
      Type[] type = cm.getPropertyTypes();
      List<String[]> checks = new ArrayList<String[]>();
      List<String[]> groupChecks = new ArrayList<String[]>();

      this.size = type.length;
      this.include = new boolean[size];
      this.subnames = new String[size][];
      this.subtypes = new Type[size][];

      for (int i = 0; i < type.length; i++) {
        if (type[i].isComponentType() && ((ComponentType) type[i]).isEmbedded()) {
          EmbeddedComponentType embedded = (EmbeddedComponentType) type[i];
          String[] sub_name = embedded.getPropertyNames();
          Type[] sub_type = embedded.getSubtypes();
          List<String> name_list = new ArrayList<String>();
          List<Type> type_list = new ArrayList<Type>();
          for (int j = 0; j < sub_type.length; j++) {
            if (IObject.class.isAssignableFrom(sub_type[j].getReturnedClass())) {
              String path = name[i] + "." + sub_name[j];
              name_list.add(path);
              type_list.add(sub_type[j]);

              addCheck(checks, groupChecks, sub_type[j].getReturnedClass(), path);
            }
          }
          add(
              i,
              name_list.toArray(new String[name_list.size()]),
              type_list.toArray(new Type[type_list.size()]));
        } else if (IObject.class.isAssignableFrom(type[i].getReturnedClass())) {
          add(i);
          addCheck(checks, groupChecks, type[i].getReturnedClass(), name[i]);
          // Create checks for

        }
      }
      this.checks = checks.toArray(new String[checks.size()][]);
      this.groupChecks = groupChecks.toArray(new String[groupChecks.size()][]);
    }
예제 #3
0
    Immutables(ClassMetadata metadata) {
      if (metadata instanceof EntityPersister) {
        this.ep = (EntityPersister) metadata;
      } else {
        throw new IllegalArgumentException(
            "Metadata passed to Immutables"
                + " must be an instanceof EntityPersister, not "
                + (metadata == null ? null : metadata.getClass()));
      }

      List<String> retVal = new ArrayList<String>();
      Type[] type = this.ep.getPropertyTypes();
      String[] name = this.ep.getPropertyNames();
      boolean[] up = this.ep.getPropertyUpdateability();

      for (int i = 0; i < type.length; i++) {

        // not updateable, so our work (for this type) is done.
        if (!up[i]) {
          retVal.add(name[i]);
        }

        // updateable, but maybe a component subtype is NOT.
        else if (type[i].isComponentType() && ((ComponentType) type[i]).isEmbedded()) {
          EmbeddedComponentType embedded = (EmbeddedComponentType) type[i];
          String[] sub_name = embedded.getPropertyNames();
          Type[] sub_type = embedded.getSubtypes();
          List<String> name_list = new ArrayList<String>();
          List<Type> type_list = new ArrayList<Type>();
          for (int j = 0; j < sub_type.length; j++) {
            // INCOMPLETE !!!
          }
        }
      }
      immutableFields = retVal.toArray(new String[retVal.size()]);
    }