javax.persistence.OneToOne#fetch ( )源码实例Demo

下面列出了javax.persistence.OneToOne#fetch ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: lams   文件: AnnotationBinder.java
protected static void defineFetchingStrategy(ToOne toOne, XProperty property) {
	LazyToOne lazy = property.getAnnotation( LazyToOne.class );
	Fetch fetch = property.getAnnotation( Fetch.class );
	ManyToOne manyToOne = property.getAnnotation( ManyToOne.class );
	OneToOne oneToOne = property.getAnnotation( OneToOne.class );
	FetchType fetchType;
	if ( manyToOne != null ) {
		fetchType = manyToOne.fetch();
	}
	else if ( oneToOne != null ) {
		fetchType = oneToOne.fetch();
	}
	else {
		throw new AssertionFailure(
				"Define fetch strategy on a property not annotated with @OneToMany nor @OneToOne"
		);
	}
	if ( lazy != null ) {
		toOne.setLazy( !( lazy.value() == LazyToOneOption.FALSE ) );
		toOne.setUnwrapProxy( ( lazy.value() == LazyToOneOption.NO_PROXY ) );
	}
	else {
		toOne.setLazy( fetchType == FetchType.LAZY );
		toOne.setUnwrapProxy( false );
	}
	if ( fetch != null ) {
		if ( fetch.value() == org.hibernate.annotations.FetchMode.JOIN ) {
			toOne.setFetchMode( FetchMode.JOIN );
			toOne.setLazy( false );
			toOne.setUnwrapProxy( false );
		}
		else if ( fetch.value() == org.hibernate.annotations.FetchMode.SELECT ) {
			toOne.setFetchMode( FetchMode.SELECT );
		}
		else if ( fetch.value() == org.hibernate.annotations.FetchMode.SUBSELECT ) {
			throw new AnnotationException( "Use of FetchMode.SUBSELECT not allowed on ToOne associations" );
		}
		else {
			throw new AssertionFailure( "Unknown FetchMode: " + fetch.value() );
		}
	}
	else {
		toOne.setFetchMode( getFetchMode( fetchType ) );
	}
}
 
@Override
protected MetaAttribute createAttribute(T metaDataObject, PropertyDescriptor desc) {
	MetaEntityAttribute attr = new MetaEntityAttribute();
	attr.setName(desc.getName());
	attr.setParent(metaDataObject, true);
	if (hasJpaAnnotations(attr)) {
		ManyToMany manyManyAnnotation = attr.getAnnotation(ManyToMany.class);
		ManyToOne manyOneAnnotation = attr.getAnnotation(ManyToOne.class);
		OneToMany oneManyAnnotation = attr.getAnnotation(OneToMany.class);
		OneToOne oneOneAnnotation = attr.getAnnotation(OneToOne.class);
		Version versionAnnotation = attr.getAnnotation(Version.class);
		ElementCollection elemCollectionAnnotation = attr.getAnnotation(ElementCollection.class);

		attr.setVersion(versionAnnotation != null);

		FetchType fetchType = null;
		if (manyManyAnnotation != null) {
			fetchType = manyManyAnnotation.fetch();
		}
		if (oneManyAnnotation != null) {
			fetchType = oneManyAnnotation.fetch();
		}
		if (oneOneAnnotation != null) {
			fetchType = oneOneAnnotation.fetch();
		}

		attr.setAssociation(manyManyAnnotation != null || manyOneAnnotation != null || oneManyAnnotation != null
				|| oneOneAnnotation != null);

		boolean lazyCollection = elemCollectionAnnotation != null
				&& elemCollectionAnnotation.fetch() != FetchType.EAGER;
		boolean lazyAssociation = attr.isAssociation() && (fetchType == null || fetchType == FetchType.LAZY);

		attr.setLazy(lazyCollection || lazyAssociation);
	} else {
		attr.setDerived(true);
	}

	attr.setSortable(true);
	attr.setFilterable(true);

	return attr;
}