javax.persistence.ParameterMode#IN源码实例Demo

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

源代码1 项目: lams   文件: ParameterBindImpl.java
private void internalSetValue(T value) {
	if ( procedureParameter.getMode() != ParameterMode.IN && procedureParameter.getMode() != ParameterMode.INOUT ) {
		throw new IllegalStateException( "Can only bind values for IN/INOUT parameters : " + procedureParameter );
	}

	if ( procedureParameter.getParameterType() != null ) {
		if ( value == null ) {
			if ( !procedureParameter.isPassNullsEnabled() ) {
				throw new IllegalArgumentException( "The parameter " +
						( procedureParameter.getName() != null
								? "named [" + procedureParameter.getName() + "]"
								: "at position [" + procedureParameter.getPosition() + "]" )
						+ " was null. You need to call ParameterRegistration#enablePassingNulls(true) in order to pass null parameters." );
			}
		}
		else if ( !procedureParameter.getParameterType().isInstance( value ) &&
				!procedureParameter.getHibernateType().getReturnedClass().isInstance( value ) ) {
			throw new IllegalArgumentException( "Bind value [" + value + "] was not of specified type [" + procedureParameter
					.getParameterType() );
		}
	}

	this.value = value;
	this.isBound = true;
}
 
源代码2 项目: lams   文件: ProcedureParameterImpl.java
@Override
@SuppressWarnings("unchecked")
public T extract(CallableStatement statement) {
	if ( mode == ParameterMode.IN ) {
		throw new ParameterMisuseException( "IN parameter not valid for output extraction" );
	}
	try {
		if ( mode == ParameterMode.REF_CURSOR ) {
			if ( procedureCall.getParameterStrategy() == ParameterStrategy.NAMED ) {
				return (T) statement.getObject( name );
			}
			else {
				return (T) statement.getObject( startIndex );
			}
		}
		else {
			final Type hibernateType = determineHibernateType();
			final int[] sqlTypes = hibernateType.sqlTypes( procedureCall.getSession().getFactory() );

			// TODO: sqlTypesToUse.length > 1 does not seem to have a working use case (HHH-10769).
			// For now, if sqlTypes.length > 1 with a named parameter, then extract
			// parameter values by position (since we only have one name).
			final boolean useNamed = sqlTypes.length == 1 &&
					procedureCall.getParameterStrategy() == ParameterStrategy.NAMED &&
					canDoNameParameterBinding( hibernateType );


			if ( ProcedureParameterExtractionAware.class.isInstance( hibernateType ) ) {
				if ( useNamed ) {
					return (T) ( (ProcedureParameterExtractionAware) hibernateType ).extract(
							statement,
							new String[] { getName() },
							procedureCall.getSession()
					);
				}
				else {
					return (T) ( (ProcedureParameterExtractionAware) hibernateType ).extract(
							statement,
							startIndex,
							procedureCall.getSession()
					);
				}
			}
			else {
				if ( useNamed ) {
					return (T) statement.getObject( name );
				}
				else {
					return (T) statement.getObject( startIndex );
				}
			}
		}
	}
	catch (SQLException e) {
		throw procedureCall.getSession().getFactory().getSQLExceptionHelper().convert(
				e,
				"Unable to extract OUT/INOUT parameter value"
		);
	}
}
 
 同类方法