我有一个带有用户的表,该表的第一个字段是id。
@Entity
@Table(name = "usr")
public class User implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
...
@CollectionTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"))
@Enumerated(EnumType.STRING)
private Set<Role> roles;
}
有一个枚举列出了安全角色的类型。
public enum Role implements GrantedAuthority {
USER, ADMIN;
@Override
public String getAuthority() {
return name();
}
}
id
表中的 usr
字段通过 user_role
中的外键链接>表格。
user_role
表没有任何实体,Hibernate根据**user**
实体类中指定的注释自动创建键和具有角色的表。
我正在尝试删除**user**
记录。
@Override
@Transactional
public void rollbackUserSave(User user) {
Optional<User> byId = userRepository.findById(user.getId());
User userForDelete = byId.orElse(null);
deleteFromUser(userForDelete);
}
/** Удаление из таблицы usr данных*/
private void deleteFromUser(User user) {
if (user != null) {
this.userRepository.delete(user);
}
}
但是删除不会发生,并且会出现相同的错误,并且在控制台中,我看不到有关删除失败的消息。
更新
现在可以了。我没有使用调试模式。
这是我的代码。
public Optional<User> addUser(User user) {
String username = user.getUsername();
User userFromDb = userRepository.findByUsername(username);
if (userFromDb != null) {
return Optional.empty();
}
user.setActive(true);
Set<Role> singleton = Collections.singleton(Role.USER);
user.setRoles(singleton);
String stringUuid = UUID.randomUUID().toString();
user.setActivationCode(stringUuid);
userRepository.save(user);
if(sendMail(user)){
User byUsername = this.userRepository.findByUsername(username);
return Optional.ofNullable(byUsername);
}
return Optional.empty();
}
private boolean sendMail(User user) {
String emailTo = user.getEmail();
String username = user.getUsername();
String activationCode = user.getActivationCode();
String messageText = "Hello, %s! \n" +
"Welcome to Sweater. Please, visit next link: http://localhost:8080/%s/activate/%s";
String message = String.format(messageText, username, username, activationCode);
boolean isSend = false;
if (!emailTo.isEmpty()) {
isSend = this.mailSender.send(emailTo, "Activation code", message);
}
if(!isSend && !emailTo.isEmpty()){
rollbackUserSave(user);
}
return true;
}
@Override
@Transactional
public void rollbackUserSave(User user) {
Optional<User> byId = userRepository.findById(user.getId());
User userForDelete = byId.orElse(null);
deleteFromUser(userForDelete);
}
private void deleteFromUser(User user) {
if (user != null) {
this.userRepository.delete(user);
}
}
有人可以解释发生了什么吗?谢谢。