我开始在日志中看到此警告:
HHH000456:命名参数用于可调用语句,但数据库元数据表示不支持命名参数。
这是由这条线引起的
query.registerStoredProcedureParameter(RECORD_ID, String.class, ParameterMode.IN);
深入了解Hibernate实现会显示记录警告的行
private void prepareForNamedParameters() {
if (this.parameterStrategy == ParameterStrategy.POSITIONAL) {
throw new QueryException("Cannot mix named and positional parameters");
} else {
if (this.parameterStrategy == ParameterStrategy.UNKNOWN) {
ExtractedDatabaseMetaData databaseMetaData = ((JdbcEnvironment)this.getSession().getJdbcCoordinator().getJdbcSessionOwner().getJdbcSessionContext().getServiceRegistry().getService(JdbcEnvironment.class)).getExtractedDatabaseMetaData();
if (!databaseMetaData.supportsNamedParameters()) { // true, :picard-facepalm:
LOG.unsupportedNamedParameters();
}
this.parameterStrategy = ParameterStrategy.NAMED;
}
}
}
所以我做了一些调查,结果是:
SessionImplementor sessionImp = (org.hibernate.engine.spi.SessionImplementorSessionImplementor) entityManager.getDelegate();
DatabaseMetaData metadata = sessionImp.connection().getMetaData();
metadata.supportsNamedParameters(); // true
令人困惑。
思考?我错过了什么?我们有一个2016 MySQL数据库。