У меня есть сущность «Пользователь» и сущность «Роль». Каждая роль имеет свой 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
Столбец получает нулевое значение ⇐ JAVA
Программисты JAVA общаются здесь
1730272397
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
Подробнее здесь: [url]https://stackoverflow.com/questions/79139817/column-receiving-null-value[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия