baseconfigintrospector.java
来自「RESIN 3.2 最新源码」· Java 代码 · 共 2,100 行 · 第 1/5 页
JAVA
2,100 行
if (typeConfig != null) { String access = typeConfig.getAccess(); if (access != null) return access.equals("FIELD"); Class parentClass = type.getSuperclass(); if (parentClass == null) return false; else { getInternalEntityConfig(parentClass, _annotationCfg); EntityConfig superEntityConfig = _annotationCfg.getEntityConfig(); if (superEntityConfig == null) return false; return isField(parentClass, superEntityConfig, false); } } for (Field field : type.getDeclaredFields()) { for (Class annType : _annTypes) { if (field.getAnnotation(annType) != null) { return true; } } } return isField(type.getSuperclass(), null, false); } private IdField introspectId(AmberPersistenceUnit persistenceUnit, EntityType entityType, AccessibleObject field, String fieldName, Class fieldType, IdConfig idConfig) throws ConfigException, SQLException { javax.persistence.Id id = field.getAnnotation(javax.persistence.Id.class); Column column = field.getAnnotation(javax.persistence.Column.class); ColumnConfig columnConfig = null; GeneratedValueConfig generatedValueConfig = null; if (idConfig != null) { columnConfig = idConfig.getColumn(); generatedValueConfig = idConfig.getGeneratedValue(); } GeneratedValue gen = field.getAnnotation(GeneratedValue.class); AmberType amberType = persistenceUnit.createType(fieldType); KeyPropertyField idField; AmberColumn keyColumn = null; keyColumn = createColumn(entityType, field, fieldName, column, amberType, columnConfig); if (entityType.getTable() != null) { idField = new KeyPropertyField(entityType, fieldName, keyColumn); } else { idField = new KeyPropertyField(entityType, fieldName, keyColumn); return idField; } if (gen == null) { } else { JdbcMetaData metaData = null; /* XXX: validation needs to occur later try { metaData = persistenceUnit.getMetaData(); } catch (ConfigException e) { throw e; } catch (Exception e) { throw new ConfigException(L.l("Unable to get meta data for database. Meta data is needed for generated values."), e); } */ if (GenerationType.IDENTITY.equals(gen.strategy())) { /* XXX: validation later if (! metaData.supportsIdentity()) throw new ConfigException(L.l("'{0}' does not support identity.", metaData.getDatabaseName())); */ keyColumn.setGeneratorType("identity"); idField.setGenerator("identity"); } else if (GenerationType.SEQUENCE.equals(gen.strategy())) { /* XXX: validation later if (! metaData.supportsSequences()) throw new ConfigException(L.l("'{0}' does not support sequence.", metaData.getDatabaseName())); */ addSequenceIdGenerator(persistenceUnit, idField, gen); } else if (GenerationType.TABLE.equals(gen.strategy())) { addTableIdGenerator(persistenceUnit, idField, id); } else if (GenerationType.AUTO.equals(gen.strategy())) { keyColumn.setGeneratorType("auto"); idField.setGenerator("auto"); /* XXX: validation later if (metaData.supportsIdentity()) { keyColumn.setGeneratorType("identity"); idField.setGenerator("identity"); } else if (metaData.supportsSequences()) { addSequenceIdGenerator(persistenceUnit, idField, gen); } else { addTableIdGenerator(persistenceUnit, idField, id); } */ } } return idField; } private IdField introspectEmbeddedId(AmberPersistenceUnit persistenceUnit, EntityType ownerType, AccessibleObject field, String fieldName, Class fieldType) throws ConfigException, SQLException { IdField idField; EmbeddableType embeddableType = (EmbeddableType) _configManager.introspect(fieldType); if (embeddableType == null) throw new IllegalStateException("" + fieldType + " is an unsupported embeddable type"); idField = new EmbeddedIdField(ownerType, embeddableType, fieldName); return idField; } void addSequenceIdGenerator(AmberPersistenceUnit persistenceUnit, KeyPropertyField idField, GeneratedValue genAnn) throws ConfigException { idField.setGenerator("sequence"); idField.getColumn().setGeneratorType("sequence"); String name = genAnn.generator(); if (name == null || "".equals(name)) name = idField.getEntitySourceType().getTable().getName() + "_cseq"; IdGenerator gen = persistenceUnit.createSequenceGenerator(name, 1); idField.getEntitySourceType().setGenerator(idField.getName(), gen); } void addTableIdGenerator(AmberPersistenceUnit persistenceUnit, KeyPropertyField idField, javax.persistence.Id idAnn) throws ConfigException { idField.setGenerator("table"); idField.getColumn().setGeneratorType("table"); String name = null;// XXX: idAnn.name(); if (name == null || "".equals(name)) name = "caucho"; IdGenerator gen = persistenceUnit.getTableGenerator(name); if (gen == null) { String genName = "GEN_TABLE"; GeneratorTableType genTable; genTable = persistenceUnit.createGeneratorTable(genName); gen = genTable.createGenerator(name); // jpa/0g60 genTable.init(); persistenceUnit.putTableGenerator(name, gen); } idField.getEntitySourceType().setGenerator(idField.getName(), gen); } /** * Links a secondary table. */ void linkSecondaryTable(AmberTable primaryTable, AmberTable secondaryTable, PrimaryKeyJoinColumn []joinColumnsAnn) throws ConfigException { ArrayList<ForeignColumn> linkColumns = new ArrayList<ForeignColumn>(); for (AmberColumn column : primaryTable.getIdColumns()) { ForeignColumn linkColumn; PrimaryKeyJoinColumn joinAnn = getJoinColumn(joinColumnsAnn, column.getName()); String name; if (joinAnn == null) name = column.getName(); else name = joinAnn.name(); linkColumn = secondaryTable.createForeignColumn(name, column); linkColumn.setPrimaryKey(true); secondaryTable.addIdColumn(linkColumn); linkColumns.add(linkColumn); } LinkColumns link = new LinkColumns(secondaryTable, primaryTable, linkColumns); link.setSourceCascadeDelete(true); secondaryTable.setDependentIdLink(link); } /** * Links a secondary table. */ void linkInheritanceTable(AmberTable primaryTable, AmberTable secondaryTable, PrimaryKeyJoinColumn joinAnn, PrimaryKeyJoinColumnConfig pkJoinColumnCfg) throws ConfigException { PrimaryKeyJoinColumn joinAnns[] = null; if (joinAnn != null) joinAnns = new PrimaryKeyJoinColumn[] { joinAnn }; linkInheritanceTable(primaryTable, secondaryTable, joinAnns, pkJoinColumnCfg); } /** * Links a secondary table. */ void linkInheritanceTable(AmberTable primaryTable, AmberTable secondaryTable, PrimaryKeyJoinColumn []joinColumnsAnn, PrimaryKeyJoinColumnConfig pkJoinColumnCfg) throws ConfigException { ArrayList<ForeignColumn> linkColumns = new ArrayList<ForeignColumn>(); for (AmberColumn column : primaryTable.getIdColumns()) { ForeignColumn linkColumn; String name; if (joinColumnsAnn == null) { if (pkJoinColumnCfg == null) name = column.getName(); else name = pkJoinColumnCfg.getName(); } else { PrimaryKeyJoinColumn join; join = getJoinColumn(joinColumnsAnn, column.getName()); if (join == null) name = column.getName(); else name = join.name(); } linkColumn = secondaryTable.createForeignColumn(name, column); linkColumn.setPrimaryKey(true); secondaryTable.addIdColumn(linkColumn); linkColumns.add(linkColumn); } LinkColumns link = new LinkColumns(secondaryTable, primaryTable, linkColumns); link.setSourceCascadeDelete(true); secondaryTable.setDependentIdLink(link); // jpa/0l48 // link = new LinkColumns(primaryTable, // secondaryTable, // linkColumns); // // link.setSourceCascadeDelete(true); // // primaryTable.setDependentIdLink(link); } /** * Introspects the methods. */ void introspectMethods(AmberPersistenceUnit persistenceUnit, BeanType entityType, BeanType parentType, Class type, AbstractEnhancedConfig typeConfig) throws ConfigException { for (Method method : type.getDeclaredMethods()) { String methodName = method.getName(); Class []paramTypes = method.getParameterTypes(); if (method.getDeclaringClass().equals(Object.class)) continue; // jpa/0r38 // Callbacks are introspected in the main introspect() block. // introspectCallbacks(entityType, method); String propName; if (paramTypes.length != 0) { validateNonGetter(method); continue; } else if (methodName.startsWith("get")) { propName = methodName.substring(3); } else if (methodName.startsWith("is") && (method.getReturnType().equals(boolean.class) || method.getReturnType().equals(Boolean.class))) { propName = methodName.substring(2); } else { validateNonGetter(method); continue; } getInternalVersionConfig(type, method, propName, _annotationCfg); Annotation versionAnn = _annotationCfg.getAnnotation(); VersionConfig versionConfig = _annotationCfg.getVersionConfig(); if (! _annotationCfg.isNull()) { validateNonGetter(method); } else { Method setter = null; try { setter = getMethod(type, "set" + propName, new Class[] { method.getReturnType() }); } catch (Exception e) { log.log(Level.FINEST, e.toString(), e); } if (Modifier.isPrivate(method.getModifiers()) || setter == null || Modifier.isPrivate(setter.getModifiers())) { Annotation ann = isAnnotatedMethod(method); if (ann == null) { if (setter != null) ann = isAnnotatedMethod(setter); } else if (ann instanceof Transient) continue; if (ann != null) { throw error(method, L.l("'{0}' is not a valid annotation for {1}. Only public persistent property getters with matching setters may have property annotations.", ann.getClass(), getFullName(method))); } continue; } // ejb/0g03 for private if (Modifier.isStatic(method.getModifiers())) { // || ! method.isPublic()) { validateNonGetter(method); continue; } } String fieldName = toFieldName(propName); if (containsFieldOrCompletion(parentType, fieldName)) continue; Class fieldType = method.getReturnType(); introspectField(persistenceUnit, entityType, method, fieldName, fieldType, typeConfig); } } private Method getMethod(Class cl, String name, Class []param) { if (cl == null) return null;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?