IllegalArgumentException:使用AliasToBeanResultTransformer和MySQL时,Hibernate中的参数类型不匹配UNION SQLQuery [英] IllegalArgumentException: argument type mismatch in Hibernate while using AliasToBeanResultTransformer and MySQL UNION SQLQuery

查看:116
本文介绍了IllegalArgumentException:使用AliasToBeanResultTransformer和MySQL时,Hibernate中的参数类型不匹配UNION SQLQuery的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Hibernate中使用 AliasToBeanResultTransformer 进行以下查询,并且有效

SQL查询1

  //查询1 
最终字符串GET_ASSIGNMENT_STATUS =
选择不同的wtd.work_task_detail_id作为workTaskDetailId, wtd.assigned_task as assignedTask,
+e.emp_id as employeeId,concat(e.first_name,'',e.last_name)as employeeName,
+wtd.deadline_date as deadlineDate,a。 code_name as workTaskStatusName,a.code_id as workTaskStatusId,
+wtd.completion_date作为completionDate,wtd.priority作为优先级
+from work_task_detail wtd
+加入所有代码a .code_id = wtd.work_task_status
+在e.emp_id = wtd.team_member_id上加入员工e
+其中wtd.work_task_detail_id =:assignmentId;

如果我在MySQL union 查询中使用了相同的选择条件,它会给我例外 IllegalArgumentException:参数类型不匹配

SQL查询2

  //查询2 
最终字符串GET_ASSIGNMENT_STATUS =
选择不同的wtd.work_task_detail_id作为workTaskDetailId,wtd.assigned_task作为assignedTask,
+e .emp_id as employeeId,concat(e.first_name,'',e.last_name)as employeeName,
+wtd.deadline_date as deadlineDate,a.code_name as workTaskStatusName,a.code_id as workTaskStatusId,
+wtd.completion_date作为completionDate,wtd.priority作为优先级
+from work_task_detail wtd
+加入日志l on wtd.work_task_detail_id = l.tran_id和l.transaction ='ASGNMT'
+在u.user_id = l.user_id上加入用户u
+在e.emp_id = u.emp_id上加入员工e
+加入所有代码a on a.code_id = wtd.work_task_status
+其中wtd.work_task_detail_id =:assignmentId和l.user_id =:userId
+union
+select distinct wtd.work_task_detail_id as workTaskDetailId,wtd.assigned_task as assignedTask,
+e.emp_id as employeeId,concat(e.first_name,'',e.last_name)as employeeName,
+wtd.deadline_date as deadlineDate ,a.code_name为workTaskStatusName,a.code_id为workTaskStatusId,
+wtd.completion_date为completionDate,wtd.priority为优先级
+from work_task_detail wtd
+join allcode a on a.code_id = wtd.work_task_status
+在e.emp_id = wtd.team_member_id上加入员工e
+其中wtd.work_task_detail_id =:assignmentId和wtd.team_member_id =(从中选择emp_id user uu where uu.user_id =:userId);

为什么使用 UNION 导致以下异常?

LOG

  05-01-2018 12:14:57 320 org.hibernate.property。 access.spi.SetterMethodImpl.set(SetterMethodImpl.java:97)
HHH000123:IllegalArgumentException在类中:support.dto.AssignmentStatus,setter方法属性:priority
05-01-2018 12:14:57 324 org.hibernate.property.access.spi.SetterMethodImpl.set(SetterMethodImpl.java:98)
HHH000091:预期类型:布尔值,实际值:java.lang.Byte

另一个

  05-01-2018 12:14:57 342 support.DAO.ImplDeveloperDAO.getAssignmentStatus(ImplDeveloperDAO.java:1916)
消息: - 调用setter属性时发生IllegalArgumentException [support.dto.AssignmentStatus.priority(预期的类型=布尔值)]; target = [support.dto.AssignmentStatus@11643c8],属性值= [0] setter of support.dto.AssignmentStatus.priority
05-01-2018 12:14:57 345 support.DAO.ImplDeveloperDAO.getAssignmentStatus( ImplDeveloperDAO.java:1917)
根本原因: - java.lang.IllegalArgumentException:参数类型不匹配
05-01-2018 12:14:57 346 support.DAO.ImplDeveloperDAO.getAssignmentStatus(ImplDeveloperDAO.java: 1918)
**************************************** ****************

我到目前为止所尝试的

  • 在选择标准中使用 if(wtd.priority = 0,FALSE,TRUE)

  • 我也为 priority 使用了另外两个重载setter,它们的参数为 byte 和其他 BigInteger


  • 解决方案

    这个答案仍然有问题,与建议

    预期类型:布尔值,实际值:java.lang.String



    so我为我的字段 priority acceptiong String 作为参数重载了一个setter方法。现在它按预期工作。

      public void setPriority(String priority){
    this.priority =true。等于(优先级);
    }

    谢谢。


    I used AliasToBeanResultTransformer in Hibernate for following query and It works
    SQL Query 1

    //Query 1
    final String GET_ASSIGNMENT_STATUS = 
        "select distinct wtd.work_task_detail_id as workTaskDetailId, wtd.assigned_task as assignedTask, "
        + "e.emp_id as employeeId, concat( e.first_name,' ',e.last_name ) as employeeName, "
        + "wtd.deadline_date as deadlineDate, a.code_name as workTaskStatusName, a.code_id as workTaskStatusId, "
        + "wtd.completion_date as completionDate, wtd.priority as priority "
        + "from work_task_detail wtd "
        + "join allcode a on a.code_id = wtd.work_task_status "
        + "join employee e on e.emp_id = wtd.team_member_id  "
        + "where wtd.work_task_detail_id = :assignmentId";
    

    If I used same selection criteria in MySQL union query it gives me exception IllegalArgumentException: argument type mismatch

    SQL Query 2

    //Query 2           
    final String GET_ASSIGNMENT_STATUS = 
        "select distinct wtd.work_task_detail_id as workTaskDetailId, wtd.assigned_task as assignedTask, "
        + "e.emp_id as employeeId, concat( e.first_name,' ',e.last_name ) as employeeName, "
        + "wtd.deadline_date as deadlineDate, a.code_name as workTaskStatusName, a.code_id as workTaskStatusId, "
        + "wtd.completion_date as completionDate, wtd.priority as priority "
        + "from work_task_detail wtd "
        + "join logs l on wtd.work_task_detail_id = l.tran_id and l.transaction='ASGNMT' "
        + "join user u on u.user_id = l.user_id "
        + "join employee e on e.emp_id = u.emp_id "
        + "join allcode a on a.code_id = wtd.work_task_status "
        + "where wtd.work_task_detail_id = :assignmentId and l.user_id = :userId "
        + "union "
        + "select distinct wtd.work_task_detail_id as workTaskDetailId, wtd.assigned_task as assignedTask, "
        + "e.emp_id as employeeId, concat( e.first_name,' ',e.last_name ) as employeeName, "
        + "wtd.deadline_date as deadlineDate, a.code_name as workTaskStatusName, a.code_id as workTaskStatusId, "
        + "wtd.completion_date as completionDate, wtd.priority as priority "
        + "from work_task_detail wtd "
        + "join allcode a on a.code_id = wtd.work_task_status "
        + "join employee e on e.emp_id = wtd.team_member_id  "
        + "where wtd.work_task_detail_id = :assignmentId and wtd.team_member_id = ( select emp_id from user uu where uu.user_id = :userId )";
    

    Why using UNION resulting in following exception ?
    LOG

    05-01-2018 12:14:57 320 org.hibernate.property.access.spi.SetterMethodImpl.set(SetterMethodImpl.java:97) 
     HHH000123: IllegalArgumentException in class: support.dto.AssignmentStatus, setter method of property: priority 
     05-01-2018 12:14:57 324 org.hibernate.property.access.spi.SetterMethodImpl.set(SetterMethodImpl.java:98) 
     HHH000091: Expected type: boolean, actual value: java.lang.Byte 
    

    Another One

    05-01-2018 12:14:57 342 support.DAO.ImplDeveloperDAO.getAssignmentStatus(ImplDeveloperDAO.java:1916) 
     Message     :- IllegalArgumentException occurred while calling setter for property [support.dto.AssignmentStatus.priority (expected type = boolean)]; target = [support.dto.AssignmentStatus@11643c8], property value = [0] setter of support.dto.AssignmentStatus.priority 
     05-01-2018 12:14:57 345 support.DAO.ImplDeveloperDAO.getAssignmentStatus(ImplDeveloperDAO.java:1917) 
     Root Cause  :- java.lang.IllegalArgumentException: argument type mismatch 
     05-01-2018 12:14:57 346 support.DAO.ImplDeveloperDAO.getAssignmentStatus(ImplDeveloperDAO.java:1918) 
                  ************************************************************ 
    

    what I tried so far

    1. I used if( wtd.priority = 0, FALSE, TRUE ) in selection criteria
    2. I also tried two more overloaded setters for priority one with parameter as byte and other with BigInteger

    解决方案

    I referred to this answer still getting problem, with suggestion
    Expected type: boolean, actual value: java.lang.String

    so I overloaded a setter method for my field priority acceptiong String as argument. Now It worked as expected.

    public void setPriority(String priority) {
        this.priority = "true".equals(priority);
    }
    

    Thank you.

    这篇关于IllegalArgumentException:使用AliasToBeanResultTransformer和MySQL时,Hibernate中的参数类型不匹配UNION SQLQuery的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆