Столбец получает нулевое значениеJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Столбец получает нулевое значение

Сообщение Anonymous »

У меня есть сущность «Пользователь» и сущность «Роль». Каждая роль имеет свой ROLE_ID, и я хотел бы сослаться на этот столбец в таблице USERS. Столбец создается нормально, но ему присвоено значение NULL. Следующее изображение ->
[img]https://i.sstatic .net/6D8dRtBM.png[/img]

Мой UserEntity —
package com.br.BookStoreAPI.models.entities;

import com.br.BookStoreAPI.models.DTOs.loginDTOs.LoginRequestDTO;
import jakarta.validation.constraints.*;
import jakarta.persistence.*;
import lombok.*;
import org.springframework.security.crypto.password.PasswordEncoder;

import java.time.LocalDateTime;
import java.util.Set;

@Entity
@NoArgsConstructor
@Getter
@Setter
@Table(name = "USERS")
public class UserEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "USER_ID")
private Long userId;

@NotBlank
@Column(name = "USER_FIRST_NAME")
private String userFirstName;

@NotBlank
@Column(name = "USER_LAST_NAME")
private String userLastName;

@NotBlank
@Column(name = "USER_EMAIL")
private String userEmail;

@NotBlank
@Column(name = "USER_PASSWORD")
private String userPassword;

@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "ROLE_ID")
private RoleEntity role;

@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(
name = "USER_ROLES",
joinColumns = @JoinColumn(name = "USER_ID"),
inverseJoinColumns = @JoinColumn(name = "ROLE_ID")
)
private Set roles;

@Column(name = "CREATION_DATE")
private LocalDateTime creationDate;

@Column(name = "MODIFICATION_DATE")
private LocalDateTime modificationDate;

@PrePersist
protected void onCreate() {
creationDate = LocalDateTime.now();
}

@PreUpdate
protected void onUpdate() {
modificationDate = LocalDateTime.now();
}

// public boolean getRoleByName(String roleName) {
// return roles.stream()
// .anyMatch(role -> role.getRole().name().equals(roleName));
// }

public boolean isLoginCorrect(LoginRequestDTO loginRequestDTO, PasswordEncoder passwordEncoder) {
return passwordEncoder.matches(loginRequestDTO.password(), this.userPassword);
}
}

Моя RoleEntity
package com.br.BookStoreAPI.models.entities;

import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;

@Entity
@Table(name = "ROLES")
@Getter
@Setter
public class RoleEntity {
@Id
@Column(name = "ROLE_ID")
private Long roleId;

@Enumerated(EnumType.STRING)
@Column(name = "ROLE", nullable = false)
private RoleType role;

public enum RoleType {
ADMIN(1L),
USER(2L);

private final long roleId;

RoleType(long roleId) {
this.roleId = roleId;
}

public long getRoleId() {
return roleId;
}
}
}

Чтобы создать пользователя, я использую Postman следующим образом:
java

{
"userFirstName": "MatheusTeste2",
"userLastName": "Castilho",
"userEmail": "Matheus.castilho124@gmail.com",
"userPassword": "senhaSegura"
}

Но у меня есть класс, который устанавливает роль в UserService. Вот так:
public UserResponseDTO create(UserRequestDTO dto) {
var role = roleRepository.findByRoleName(RoleEntity.RoleType.USER.name());
var userFromDb = userRepository.findByUserEmail(dto.userEmail());
if (userFromDb.isPresent()) {
throw new UserAlreadyExistsException("User's email " + dto.userEmail() + " is already in use. " );
}

UserEntity userEntity = new UserEntity();
userEntity.setUserFirstName(dto.userFirstName());
userEntity.setUserLastName(dto.userLastName());
userEntity.setUserEmail(dto.userEmail());
userEntity.setUserPassword(bCryptPasswordEncoder.encode(dto.userPassword()));
userEntity.setRoles(Set.of(role));

UserEntity result = userRepository.save(userEntity);

return new UserResponseDTO(result);
}

Журнал после создания нового пользователя:
2024-10-29T19:19:39.854-03:00 INFO 11020 --- [BookStoreAPI] [nio-8080-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2024-10-29T19:19:39.854-03:00 INFO 11020 --- [BookStoreAPI] [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2024-10-29T19:19:39.856-03:00 INFO 11020 --- [BookStoreAPI] [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms
2024-10-29T19:19:40.272-03:00 INFO 11020 --- [BookStoreAPI] [nio-8080-exec-2] i.StatisticalLoggingSessionEventListener : Session Metrics {
1274800 nanoseconds spent acquiring 1 JDBC connections;
0 nanoseconds spent releasing 0 JDBC connections;
2370500 nanoseconds spent preparing 4 JDBC statements;
18114500 nanoseconds spent executing 4 JDBC statements;
0 nanoseconds spent executing 0 JDBC batches;
0 nanoseconds spent performing 0 L2C puts;
0 nanoseconds spent performing 0 L2C hits;
0 nanoseconds spent performing 0 L2C misses;
10545200 nanoseconds spent executing 1 flushes (flushing a total of 2 entities and 1 collections);
0 nanoseconds spent executing 0 partial-flushes (flushing a total of 0 entities and 0 collections)

И я делаю запрос с помощью DBeaver, используя следующую команду:
SELECT * FROM users


Подробнее здесь: https://stackoverflow.com/questions/791 ... null-value
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»