Java - Hibernate调用MySql存储过程-警告消息

neskvpey  于 2023-08-06  发布在  Java
关注(0)|答案(2)|浏览(110)

我有一个Java项目,我使用Hibernate调用存储过程。
下面是我使用的示例代码

public String findCloudName(Long cloudId) {
        LOG.info("Entered findCloudName Method - cloudId:{}", cloudId);

        String cloudName  = null;
        ProcedureCall  procedureCall = currentSession().createStoredProcedureCall("p_getCloudDetails");
        procedureCall.registerParameter( "cloudId", Long.class, ParameterMode.IN ).bindValue( cloudId );
        procedureCall.registerParameter( "cloudName", String.class, ParameterMode.OUT );

        ProcedureOutputs  outputs = procedureCall.getOutputs();

        cloudName = (String) outputs.getOutputParameterValue( "cloudName" );

        LOG.info("Exiting findCloudName Method - cloudName:{}", cloudName);
        return cloudName; 
    }

字符串
这工作正常,并产生预期的结果。然而,它在我的日志中留下了以下消息

[WARN] [320]org.hibernate.procedure.internal.ProcedureCallImpl[prepareForNamedParameters]  - HHH000456: Named parameters are used for a callable statement, but database metadata indicates named parameters are not supported.


我在浏览网站和Hibernate的源代码,试图找出如何摆脱这个警告
任何帮助都非常感谢
干杯达米安

bjg7j2ky

bjg7j2ky1#

它与HHH-8740的校正有关:
在某些情况下,数据库元数据是不正确的(即,说不支持某些东西,而实际上它是支持的)。在这种情况下,最好简单地记录警告。如果事实证明命名参数确实不受支持,那么当命名参数绑定到SQL语句时,将抛出SQLException。
因此,警告警告您不要调用查询命名参数的元数据的方法。

uidvcgyl

uidvcgyl2#

Session session=HibernateUtil.getSessionFactory().openSession();
    Transaction tx=session.beginTransaction();
    
    System.out.println("Enter Id:");
    int id=sc.nextInt();
    
    StoredProcedureQuery query=session.createStoredProcedureCall("Delete",Employee.class);
    query.registerStoredProcedureParameter("id", Integer.class, ParameterMode.IN);
    
    query.setParameter("id",sc.nextInt());
    query.executeUpdate();
    tx.commit();

字符串

相关问题