Может ли запрос вернуть только часть результатов на карте результатов на Ibatis?

Есть некоторый код, использующий Ibatis 2.3, и у меня есть класс User и resultMap следующим образом:

public class User {
  private Integer id;
  private String name;

  public Integer getId() {
    return this.id;
  }

  public void setId(final Integer id) {
    this.id = id;
  }

  public String getName() {
    return this.name;
  }

  public void setName(final String name) {
    this.name = name;
  }
}

<resultMap id="userResultMap" class="user">
    <result property="id" column="id"/>
    <result property="name" column="name"/>
</resultMap>

Затем у меня есть запрос на выборку, который возвращает только идентификатор:

<select id="getUserId" resultMap="userResultMap">
    select id from Foo
</select>

Таким образом, Ibatis хочет заполнить все результаты на resultMap, и поскольку «имя» не возвращается запросом, который он отправляет, и ошибка:

--- The error occurred in ibatis/user.xml.  
--- The error occurred while applying a result map.  
--- Check the user.userResultMap.  
--- Check the result mapping for the 'name' property.  
--- Cause: java.sql.SQLException: Column 'name' not found.

Возможно ли как-то иметь запросы, которые возвращают только часть результатов на resultMap?


person Francisco    schedule 21.05.2014    source источник
comment
Это не проблема со стороны мибатиса. Проверьте, есть ли у вас столбец с именем «имя»   -  person Karthik Prasad    schedule 22.05.2014
comment
Запрос не возвращает имя столбца, это именно проблема. Я не могу изменить запрос, он принадлежит кому-то другому и на самом деле является вызовом процедуры в Oracle. Foo - это не таблица. Запрос больше похож на: «выберите идентификатор из app.getid () ...»   -  person Francisco    schedule 24.05.2014
comment
Затем вам нужно удалить свойство из карты результатов, так как mybatis не может найти таблицу с именем столбца «имя».   -  person Karthik Prasad    schedule 26.05.2014
comment
Это именно мой вопрос, есть ли способ повторно использовать один и тот же ResultMap для разных SQL, но сообщить Ibatis, когда SQL не вернет один из столбцов. Что-то вроде установки этого свойства со значением по умолчанию/нулем, когда столбец не существует в SQL.   -  person Francisco    schedule 27.05.2014
comment
один из способов - использование наследования. Но я не вижу реального преимущества возможности повторного использования в данном случае.   -  person Karthik Prasad    schedule 27.05.2014
comment
Либо вам нужно изменить запрос, либо вам нужно изменить resultMap   -  person Saif    schedule 12.08.2014


Ответы (2)


Ваш выбранный запрос должен быть

<select id="getUserId" resultMap="userResultMap">
     select id, name from Foo
</select>

В вашем запросе отсутствует "имя". Это просто. Ваша карта результатов имеет два свойства, но вы выбираете только одно свойство. Точно так же должно быть. Надеюсь, это сработает.

person Zin Win Htet    schedule 22.10.2014

В случае пустого или нулевого значения вы можете установить некоторое значение по умолчанию для этого столбца sql в самом запросе sql, чтобы он всегда возвращал этот столбец со значением.

person user2895674    schedule 20.01.2017