У меня есть две таблицы: 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?
Я не думаю, что Transactional имеет какое-либо отношение к идентификатору пользователя. Если вы удалите транзакцию, вы все равно получите это как null? – Shinchan
@ Shinchan, когда я удаляю Transactional, я могу получить идентификатор пользователя, который не является нулевым – wukongcode