Spring Mybatis получить последний идентификатор вставки с @Transactional
У меня есть две таблицы: User и SocialAccount. Один пользователь может иметь много социальных учетных записей.
Я должен создать пользователя, прежде чем создать учетную запись 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?
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, идентификатором keyProperty будет ваша пользовательская переменная POJO.