我一直在使用Spring 4的UserDetailsManager
来创建用户,该架构是由他们的文档建议的USERS
和AUTHORITIES
表。无法从@Transaction中的关系中删除两个表
我也已经使用Spring数据@Repository
注释接口,其中被定义为具有在表USERS
上username
字段的关系的单独REGISTRATIONS
表来管理数据。
我一直面临的问题是,当我想删除一个用户,我首先使用注入春天的数据仓库,随后呼叫使用UserDetailsManager
删除的REGISTRATIONS
表中的记录deleteUser()
。 (这只是连续调用@Service
带注释的类中的@Transactional
方法中的两个连续调用)。
例如
registrationsRepository.delete(uuid);
userDetailsManager.deleteUser(registration.getUsername());
然而,如在表REGISTRATIONS
(第一线)的记录还没有被删除的用户的删除失败。随后,我得到一个异常(第二行)抱怨无法删除用户,因为REGISTRATIONS
表中存在外键约束,从而防止删除它。
如果这些更新发生在同一个事务中,为什么会失败?
编辑:定义为
@Repository
public interface RegistrationsRepository extends CrudRepository<Registration, UUID>
{
// No EntityManager injected - uses Spring Data method queries
// No additional methods defined
}
注册记忆表如下:
CREATE TABLE Registrations (
username varchar(64) NOT NULL REFERENCES Users (username),
uuid UUID NOT NULL PRIMARY KEY
);
尝试在第一次删除后刷新EntityManager。 –
注册实体是否有对用户实体的引用?或者只是某种映射到FK的ID? –
补充Guillaume的建议:delete()不会删除实体。它标记要删除的实体。删除行的实际SQL查询仅在刷新时执行。 –