2016-03-16 1 views
1

Использование MyBatis 3.2.7UseGeneratedKeys не работает для ParameterType = "Карта"

Сценарий 1:

POJO:

public class Project { 
    private Long id; 

    public Long getId() { ... } 
    public void setId(...) { ... } 
} 

DAO:

public void update(@Param("parentId") long parentId, @Param("project") Project project); 

DAO. xml

<update id="updateProject" parameterType="map" useGeneratedKeys="true" keyProperty="project.id" keyColumn="project_id"> 

Учитывая эти классы/файлы, я полагаю, что если я называю update -метод DAO с Project, который не имеет идентификатора набор еще, что после того, как он был слит/вставить в базу данных, project.id содержит генерируемый id, но, по-видимому, он все еще равен нулю.

Сценарий 2:

В том же DAO, у меня есть другая установка, которая работает прекрасно:

POJO:

public class Plan { 
    private Long id; 

    public Long getId() { ... } 
    public void setId(...) { ... } 
} 

DAO:

public void update(@Param("plan") Plan plan); 

DAO .xml

<update id="updatePlan" parameterType="Plan" useGeneratedKeys="true" keyProperty="id" keyColumn="plan_id"> 

Вопрос

Благодаря тому, что в сценарии 2 она отлично работает и не работает в сценарии 1, я полагаю, что использование сгенерированных ключей не поддерживается при использовании карты в качестве parameterType. Это правда?

+0

http://mybatis-user.963551.n3.nabble.com/Problem-with-setting-a-key-on-an-Insert-on-method- w-multiple-params-td3513325.html Похоже, что это действительно не поддерживается, если используются несколько параметров. –

ответ

1

Решение:

<update id="updateProject" parameterType="map"> 
    <selectKey keyProperty="project.id" resultType="Long" order="BEFORE"> 
     select nvl(#{project.id}, project_id_seq.nextval) from dual 
    </selectKey> 
    ... 
</update> 

 Смежные вопросы

  • Нет связанных вопросов^_^