> > A CallableStatement is also a PreparedStatement so we already know how to > bind positionally against both PreparedStatement (and CallableStatement, > since they are PreparedStatement). And only for CallableStatement does > JDBC define additional support for binding by name.
I followed the call stack to this, and I think it's fine since the user has the choice of using positional binding instead of name-based stored procedure parameter binding: if ( this.procedureCall.getParameterStrategy() == ParameterStrategy.NAMED && canDoNameParameterBinding() ) { ((ProcedureParameterNamedBinder) typeToUse).nullSafeSet( statement, null, this.getName(), session() ); } Vlad On Wed, Jun 7, 2017 at 6:39 PM, Steve Ebersole <st...@hibernate.org> wrote: > Ignoring some poor wording in the Javadocs by me :) > > On Wed, Jun 7, 2017 at 10:38 AM Steve Ebersole <st...@hibernate.org> > wrote: > >> I'm not sure what you mean when you say that SqlTypeDescriptor only >> supports binding by name. On both 5.2 and 6.0 I see : >> >> /** >> * Bind a value to a prepared statement. >> * >> * @param st The prepared statement to which to bind the value. >> * @param value The value to bind. >> * @param index The position at which to bind the value within the prepared >> statement >> * @param options The options. >> * >> * @throws SQLException Indicates a JDBC error occurred. >> */ >> public void bind(PreparedStatement st, X value, int index, WrapperOptions >> options) throws SQLException; >> >> /** >> * Bind a value to a CallableStatement. >> * >> * @param st The prepared statement to which to bind the value. >> * @param value The value to bind. >> * @param name The name to bind the value within the prepared statement >> * @param options The options. >> * >> * @throws SQLException Indicates a JDBC error occurred. >> */ >> public void bind(CallableStatement st, X value, String name, WrapperOptions >> options) throws SQLException; >> >> >> >> Which is what you'd expect. I'm not really following what you are >> saying. A CallableStatement is also a PreparedStatement so we already know >> how to bind positionally against both PreparedStatement (and >> CallableStatement, since they are PreparedStatement). And only for >> CallableStatement does JDBC define additional support for binding by name. >> >> And 6.0 is going to bind by position, but that's what all other versions >> of Hibernate have done. The change in 6.0 you are thinking about is >> *reading* values back (from ResultSets, CallableStatement params, etc). >> >> On Wed, Jun 7, 2017 at 9:13 AM Vlad Mihalcea <mihalcea.v...@gmail.com> >> wrote: >> >>> Hi, >>> >>> While writing an example for a custom Hibernate Type which supports >>> PostgreSQL arrays, >>> I realized that the SqlTypeDescriptor only supports bind by name: >>> >>> @Override >>> protected void doBind(CallableStatement st, X value, String name, >>> WrapperOptions options) >>> throws SQLException { >>> } >>> >>> However, for the java.sql.Array, we only have a bind by index method in >>> java.sql.Statement: >>> >>> void setArray (int parameterIndex, Array x) throws SQLException; >>> >>> I remember that 6.0 is going to bind by index, so maybe this issue is >>> already taken care of in the new version. >>> Should we provide some fix for 5.x as well? >>> >>> Vlad >>> _______________________________________________ >>> hibernate-dev mailing list >>> hibernate-dev@lists.jboss.org >>> https://lists.jboss.org/mailman/listinfo/hibernate-dev >>> >> _______________________________________________ hibernate-dev mailing list hibernate-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/hibernate-dev