2015-04-14 4 views
0

У меня есть две таблицы: User и SocialAccount. Один пользователь может иметь много socialAccount.spring mybatis получить последний идентификатор вставки с @Transactional

Я должен создать пользователь, прежде чем создать socialAccount:

@Transactional 
public SocialAccount create(SocialAccount socialAccount) { 
    if (socialAccount.getUserId() == null) { 
     User user = new User(); 
     userDao.createUser(user); 
     System.out.println(user.getId()); 

     if(user.getId() == null){ 
      return null; 
     } 

     socialAccount.setUserId(user.getId()); 
    } 
    return socialAccountDao.create(socialAccount); 
} 

В этом методе, во-первых, я создать пользователя, но с @Transactional я получаю user.getId() равна нулю. когда я удаляю @Transactional, user.getId() является нормальным.

вот моя весна конфигурации:

<bean name="transactionManager" 
     class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
    <property name="dataSource" ref="dataSource"></property> 
</bean> 

<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven> 

и здесь userDao.createUser() методы:

public User createUser(User user) { 
    int affectedNum = super.getSqlSession().insert("UserSQL.createUser", user); 
    if (affectedNum > 0) { 
     return user; 
    } 
    return null; 
} 

и мой картографа является:

<insert id="createUser" parameterType="User"> 
    <selectKey resultType="java.lang.Long" keyProperty="id" order="AFTER" > 
     SELECT LAST_INSERT_ID() as id 
    </selectKey> 
    INSERT INTO User(CTIME, UTIME) VALUES (now(), now()) 
</insert> 

Может некоторые люди говорят мне, как получить идентификатор пользователя с @Transactional?

+0

Я не думаю, что Transactional имеет какое-либо отношение к идентификатору пользователя. Если вы удалите транзакцию, вы все равно получите это как null? – Shinchan

+0

@ Shinchan, когда я удаляю Transactional, я могу получить идентификатор пользователя, который не является нулевым – wukongcode

ответ

1

попробуйте изменить его в своем XML-редакторе.

<insert id="createUser" parameterType="User"> 
    INSERT INTO User(CTIME, UTIME) VALUES (now(), now()) 
    <selectKey resultType="User" keyProperty="id" order="AFTER" > 
     SELECT LAST_INSERT_ID() as id 
    </selectKey>   
</insert> 

здесь, в теге Selectkey. Идентификатор объекта будет вашей переменной POJO пользователя.

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