📄 persistentclass.java
字号:
} return property; } private Property getProperty(String propertyName, Iterator iterator) throws MappingException { while ( iterator.hasNext() ) { Property prop = (Property) iterator.next(); if ( prop.getName().equals( StringHelper.root(propertyName) ) ) { return prop; } } throw new MappingException( "property [" + propertyName + "] not found on entity [" + getEntityName() + "]" ); } public Property getProperty(String propertyName) throws MappingException { Iterator iter = getPropertyClosureIterator(); Property identifierProperty = getIdentifierProperty(); if ( identifierProperty != null && identifierProperty.getName().equals( StringHelper.root(propertyName) ) ) { return identifierProperty; } else { return getProperty( propertyName, iter ); } } abstract public int getOptimisticLockMode(); public void setOptimisticLockMode(int optimisticLockMode) { this.optimisticLockMode = optimisticLockMode; } public void validate(Mapping mapping) throws MappingException { Iterator iter = getPropertyIterator(); while ( iter.hasNext() ) { Property prop = (Property) iter.next(); if ( !prop.isValid(mapping) ) { throw new MappingException( "property mapping has wrong number of columns: " + StringHelper.qualify( getEntityName(), prop.getName() ) + " type: " + prop.getType().getName() ); } } checkPropertyDuplication(); checkColumnDuplication(); } private void checkPropertyDuplication() throws MappingException { HashSet names = new HashSet(); Iterator iter = getPropertyIterator(); while ( iter.hasNext() ) { Property prop = (Property) iter.next(); if ( !names.add( prop.getName() ) ) { throw new MappingException( "Duplicate property mapping of " + prop.getName() + " found in " + getEntityName()); } } } public boolean isDiscriminatorValueNotNull() { return NOT_NULL_DISCRIMINATOR_MAPPING.equals( getDiscriminatorValue() ); } public boolean isDiscriminatorValueNull() { return NULL_DISCRIMINATOR_MAPPING.equals( getDiscriminatorValue() ); } public java.util.Map getMetaAttributes() { return metaAttributes; } public void setMetaAttributes(java.util.Map metas) { this.metaAttributes = metas; } public MetaAttribute getMetaAttribute(String name) { return metaAttributes==null?null:(MetaAttribute) metaAttributes.get(name); } public String toString() { return getClass().getName() + '(' + getEntityName() + ')'; } public Iterator getJoinIterator() { return joins.iterator(); } public Iterator getJoinClosureIterator() { return joins.iterator(); } public void addJoin(Join join) { joins.add(join); join.setPersistentClass(this); } public int getJoinClosureSpan() { return joins.size(); } public int getPropertyClosureSpan() { int span = properties.size(); for ( int i=0; i<joins.size(); i++ ) { Join join = (Join) joins.get(i); span += join.getPropertySpan(); } return span; } public int getJoinNumber(Property prop) { int result=1; Iterator iter = getSubclassJoinClosureIterator(); while ( iter.hasNext() ) { Join join = (Join) iter.next(); if ( join.containsProperty(prop) ) return result; result++; } return 0; } /** * Build an iterator over the properties defined on this class. The returned * iterator only accounts for "normal" properties (i.e. non-identifier * properties). * <p/> * Differs from {@link #getUnjoinedPropertyIterator} in that the iterator * we return here will include properties defined as part of a join. * * @return An iterator over the "normal" properties. */ public Iterator getPropertyIterator() { ArrayList iterators = new ArrayList(); iterators.add( properties.iterator() ); for ( int i = 0; i < joins.size(); i++ ) { Join join = ( Join ) joins.get( i ); iterators.add( join.getPropertyIterator() ); } return new JoinedIterator( iterators ); } /** * Build an iterator over the properties defined on this class <b>which * are not defined as part of a join</b>. As with {@link #getPropertyIterator}, * the returned iterator only accounts for non-identifier properties. * * @return An iterator over the non-joined "normal" properties. */ public Iterator getUnjoinedPropertyIterator() { return properties.iterator(); } public void setCustomSQLInsert(String customSQLInsert, boolean callable, ExecuteUpdateResultCheckStyle checkStyle) { this.customSQLInsert = customSQLInsert; this.customInsertCallable = callable; this.insertCheckStyle = checkStyle; } public String getCustomSQLInsert() { return customSQLInsert; } public boolean isCustomInsertCallable() { return customInsertCallable; } public ExecuteUpdateResultCheckStyle getCustomSQLInsertCheckStyle() { return insertCheckStyle; } public void setCustomSQLUpdate(String customSQLUpdate, boolean callable, ExecuteUpdateResultCheckStyle checkStyle) { this.customSQLUpdate = customSQLUpdate; this.customUpdateCallable = callable; this.updateCheckStyle = checkStyle; } public String getCustomSQLUpdate() { return customSQLUpdate; } public boolean isCustomUpdateCallable() { return customUpdateCallable; } public ExecuteUpdateResultCheckStyle getCustomSQLUpdateCheckStyle() { return updateCheckStyle; } public void setCustomSQLDelete(String customSQLDelete, boolean callable, ExecuteUpdateResultCheckStyle checkStyle) { this.customSQLDelete = customSQLDelete; this.customDeleteCallable = callable; this.deleteCheckStyle = checkStyle; } public String getCustomSQLDelete() { return customSQLDelete; } public boolean isCustomDeleteCallable() { return customDeleteCallable; } public ExecuteUpdateResultCheckStyle getCustomSQLDeleteCheckStyle() { return deleteCheckStyle; } public void addFilter(String name, String condition) { filters.put(name, condition); } public java.util.Map getFilterMap() { return filters; } public boolean isForceDiscriminator() { return false; } public abstract boolean isJoinedSubclass(); public String getLoaderName() { return loaderName; } public void setLoaderName(String loaderName) { this.loaderName = loaderName==null ? null : loaderName.intern(); } public abstract java.util.Set getSynchronizedTables(); public void addSynchronizedTable(String table) { synchronizedTables.add(table); } public Boolean isAbstract() { return isAbstract; } public void setAbstract(Boolean isAbstract) { this.isAbstract = isAbstract; } protected void checkColumnDuplication(Set distinctColumns, Iterator columns) throws MappingException { while ( columns.hasNext() ) { Selectable columnOrFormula = (Selectable) columns.next(); if ( !columnOrFormula.isFormula() ) { Column col = (Column) columnOrFormula; if ( !distinctColumns.add( col.getName() ) ) { throw new MappingException( "Repeated column in mapping for entity: " + getEntityName() + " column: " + col.getName() + " (should be mapped with insert=\"false\" update=\"false\")" ); } } } } protected void checkPropertyColumnDuplication(Set distinctColumns, Iterator properties) throws MappingException { while ( properties.hasNext() ) { Property prop = (Property) properties.next(); if ( prop.getValue() instanceof Component ) { //TODO: remove use of instanceof! Component component = (Component) prop.getValue(); checkPropertyColumnDuplication( distinctColumns, component.getPropertyIterator() ); } else { if ( prop.isUpdateable() || prop.isInsertable() ) { checkColumnDuplication( distinctColumns, prop.getColumnIterator() ); } } } } protected Iterator getNonDuplicatedPropertyIterator() { return getUnjoinedPropertyIterator(); } protected Iterator getDiscriminatorColumnIterator() { return EmptyIterator.INSTANCE; } protected void checkColumnDuplication() { HashSet cols = new HashSet(); if (getIdentifierMapper() == null ) { //an identifier mapper => getKey will be included in the getNonDuplicatedPropertyIterator() //and checked later, so it needs to be excluded checkColumnDuplication( cols, getKey().getColumnIterator() ); } checkColumnDuplication( cols, getDiscriminatorColumnIterator() ); checkPropertyColumnDuplication( cols, getNonDuplicatedPropertyIterator() ); Iterator iter = getJoinIterator(); while ( iter.hasNext() ) { cols.clear(); Join join = (Join) iter.next(); checkColumnDuplication( cols, join.getKey().getColumnIterator() ); checkPropertyColumnDuplication( cols, join.getPropertyIterator() ); } } public abstract Object accept(PersistentClassVisitor mv); public String getNodeName() { return nodeName; } public void setNodeName(String nodeName) { this.nodeName = nodeName; } public boolean hasPojoRepresentation() { return getClassName()!=null; } public boolean hasDom4jRepresentation() { return getNodeName()!=null; } public boolean hasSubselectLoadableCollections() { return hasSubselectLoadableCollections; } public void setSubselectLoadableCollections(boolean hasSubselectCollections) { this.hasSubselectLoadableCollections = hasSubselectCollections; } public void prepareTemporaryTables(Mapping mapping, Dialect dialect) { if ( dialect.supportsTemporaryTables() ) { temporaryIdTableName = dialect.generateTemporaryTableName( getTable().getName() ); Table table = new Table(); table.setName( temporaryIdTableName ); Iterator itr = getTable().getPrimaryKey().getColumnIterator(); while( itr.hasNext() ) { Column column = (Column) itr.next(); table.addColumn( (Column) column.clone() ); } temporaryIdTableDDL = table.sqlTemporaryTableCreateString( dialect, mapping ); } } public String getTemporaryIdTableName() { return temporaryIdTableName; } public String getTemporaryIdTableDDL() { return temporaryIdTableDDL; } public Component getIdentifierMapper() { return identifierMapper; } public boolean hasIdentifierMapper() { return identifierMapper != null; } public void setIdentifierMapper(Component handle) { this.identifierMapper = handle; } public void addTuplizer(EntityMode entityMode, String implClassName) { if ( tuplizerImpls == null ) { tuplizerImpls = new HashMap(); } tuplizerImpls.put( entityMode, implClassName ); } public String getTuplizerImplClassName(EntityMode mode) { if ( tuplizerImpls == null ) return null; return ( String ) tuplizerImpls.get( mode ); } public java.util.Map getTuplizerMap() { if ( tuplizerImpls == null ) { return null; } return java.util.Collections.unmodifiableMap( tuplizerImpls ); } public boolean hasNaturalId() { Iterator props = getRootClass().getPropertyIterator(); while ( props.hasNext() ) { if ( ( (Property) props.next() ).isNaturalIdentifier() ) { return true; } } return false; } public abstract boolean isLazyPropertiesCacheable();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -