PropertyBinder.java 文件源码

java
阅读 37 收藏 0 点赞 0 评论 0

项目:lams 作者:
public Property makeProperty() {
    validateMake();
    LOG.debugf( "Building property %s", name );
    Property prop = new Property();
    prop.setName( name );
    prop.setNodeName( name );
    prop.setValue( value );
    prop.setLazy( lazy );
    prop.setCascade( cascade );
    prop.setPropertyAccessorName( accessType.getType() );

    if ( property != null ) {
        prop.setValueGenerationStrategy( determineValueGenerationStrategy( property ) );
    }

    NaturalId naturalId = property != null ? property.getAnnotation( NaturalId.class ) : null;
    if ( naturalId != null ) {
        if ( ! entityBinder.isRootEntity() ) {
            throw new AnnotationException( "@NaturalId only valid on root entity (or its @MappedSuperclasses)" );
        }
        if ( ! naturalId.mutable() ) {
            updatable = false;
        }
        prop.setNaturalIdentifier( true );
    }

    // HHH-4635 -- needed for dialect-specific property ordering
    Lob lob = property != null ? property.getAnnotation( Lob.class ) : null;
    prop.setLob( lob != null );

    prop.setInsertable( insertable );
    prop.setUpdateable( updatable );

    // this is already handled for collections in CollectionBinder...
    if ( Collection.class.isInstance( value ) ) {
        prop.setOptimisticLocked( ( (Collection) value ).isOptimisticLocked() );
    }
    else {
        final OptimisticLock lockAnn = property != null
                ? property.getAnnotation( OptimisticLock.class )
                : null;
        if ( lockAnn != null ) {
            //TODO this should go to the core as a mapping validation checking
            if ( lockAnn.excluded() && (
                    property.isAnnotationPresent( javax.persistence.Version.class )
                            || property.isAnnotationPresent( Id.class )
                            || property.isAnnotationPresent( EmbeddedId.class ) ) ) {
                throw new AnnotationException(
                        "@OptimisticLock.exclude=true incompatible with @Id, @EmbeddedId and @Version: "
                                + StringHelper.qualify( holder.getPath(), name )
                );
            }
        }
        final boolean isOwnedValue = !isToOneValue( value ) || insertable; // && updatable as well???
        final boolean includeInOptimisticLockChecks = ( lockAnn != null )
                ? ! lockAnn.excluded()
                : isOwnedValue;
        prop.setOptimisticLocked( includeInOptimisticLockChecks );
    }

    LOG.tracev( "Cascading {0} with {1}", name, cascade );
    this.mappingProperty = prop;
    return prop;
}
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号