Я пытаюсь установить простое приложение, и у меня возникают проблемы с транзакциями. Я предполагаю, что делаю что-то не так или дизайн неправильный.
У меня есть сущность
Код: Выделить всё
@Entity
public @Data class UserAccount {
@NotNull
@Column(unique = true)
private String username;
@ManyToMany
@JoinTable(
name = "user_account_roles",
joinColumns = @JoinColumn(name = "user_account_id"),
inverseJoinColumns = @JoinColumn(name = "role_id"))
@SQLJoinTableRestriction("active 0")
private List roles;
@ManyToMany
@JoinTable(
name = "user_account_authorities",
joinColumns = @JoinColumn(name = "user_account_id"),
inverseJoinColumns = @JoinColumn(name = "authority_id"))
@SQLJoinTableRestriction("active 0")
private List authorities;
}
Код: Выделить всё
@Transactional
@Repository
public interface UserAccountRepository extends NameableCrudRepository, JpaRepository {
UserAccount findByUsername(String username);
}
Код: Выделить всё
@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor
public class CustomUserDetailsService implements UserDetailsService {
UserAccountRepository userAccountRepository;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
UserAccount user = userAccountRepository.findByUsername(username);
if (user == null) {
throw new UsernameNotFoundException("User Not Found with username: " + username);
}
Hibernate.initialize(user.roles()); new SimpleGrantedAuthority(authority.authority().toString())).toList();
return User.withUsername(user.username())
.password(user.password())
.authorities(authorities)
.roles(roles)
.build();
}
}
Код: Выделить всё
JDBC exception executing SQL [select r1_0.user_account_id,r1_1.id,r1_1.active,r1_1.role from user_account_roles r1_0 join user_account_role r1_1 on r1_1.id=r1_0.role_id where r1_0.user_account_id=? and (r1_0.active 0)] [ERROR: current transaction is aborted, commands ignored until end of transaction block] [n/a]
Я добавил @EnableTransactionManagement в конфигурацию, но не уверен, что она действительно что-то делает.
Код: Выделить всё
@Configuration
@EnableWebSecurity
@EnableTransactionManagement
@RequiredArgsConstructor
public class WebSecurityConfig {
final UserAccountRepository userAccountRepository;
Заранее большое спасибо за вашу помощь!
Подробнее здесь: https://stackoverflow.com/questions/790 ... nsactional