Сопоставление длинного поля в UserDTO с длинным полем в поле CreateBy пользователя с помощью ModelMapperJAVA

Программисты JAVA общаются здесь
Anonymous
Сопоставление длинного поля в UserDTO с длинным полем в поле CreateBy пользователя с помощью ModelMapper

Сообщение Anonymous »

Идентификатор роли из UserDTO правильно сопоставляется с идентификатором объекта роли в классе User, но для созданногоBy этого не происходит, он отображается как нулевой
Я использовал библиотеку ModelMapper чтобы уменьшить код. Есть ли что-то, чего мне здесь не хватает, заранее спасибо
UserDTO.class
package com.merck.nlp.dto;

import com.merck.nlp.validation.CreateGroup;
import com.merck.nlp.validation.UpdateGroup;

import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Positive;
import jakarta.validation.constraints.Size;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class UserDTO {

// @NotNull(groups = {UpdateGroup.class}, message = "ID cannot be null")
// @Positive(groups = {UpdateGroup.class})
// private Long id;

@NotBlank(groups = {CreateGroup.class}, message = "XUID cannot be empty")
@Pattern(groups = {CreateGroup.class, UpdateGroup.class}, regexp = "^[a-zA-Z0-9]+$", message = "XUID can only contain alphanumeric characters")
private String xuid;

@NotBlank(groups = {CreateGroup.class, UpdateGroup.class}, message = "First name cannot be empty")
@Pattern(groups = {CreateGroup.class, UpdateGroup.class}, regexp = "^[a-zA-Z0-9]+$", message = "First name can only contain alphanumeric characters")
@Size(groups = {CreateGroup.class, UpdateGroup.class}, min = 3, max = 30, message = "First name must be between 3 and 30 characters")
private String firstName;

@NotBlank(groups = {CreateGroup.class, UpdateGroup.class}, message = "Last name cannot be empty")
@Pattern(groups = {CreateGroup.class, UpdateGroup.class}, regexp = "^[a-zA-Z0-9]+$", message = "Last name can only contain alphanumeric characters")
@Size(groups = {CreateGroup.class, UpdateGroup.class}, min = 3, max = 30, message = "Last name must be between 3 and 30 characters")
private String lastName;

@Email(groups = {CreateGroup.class, UpdateGroup.class}, message = "Email should be valid")
@NotNull(groups = {CreateGroup.class}, message = "Email cannot be null")
private String email;

private Boolean isActive;

@Positive(groups = {CreateGroup.class, UpdateGroup.class}, message = "Role ID must be a positive number")
@NotNull(groups = {CreateGroup.class, }, message = "Role ID cannot be null")
private Long roleId;

@NotNull(groups = {CreateGroup.class})
@Positive(groups = {CreateGroup.class}, message = "Created By ID must be a positive number")
private Long createdById;
//
// @NotNull(groups = {UpdateGroup.class})
// @Positive(groups = {UpdateGroup.class}, message = "Updated By ID must be a positive number")
// private Long updatedById;

}

UserService.class
package com.merck.nlp.service;

import org.modelmapper.ModelMapper;
import org.modelmapper.convention.MatchingStrategies;
import org.modelmapper.spi.MatchingStrategy;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.merck.nlp.dto.UserDTO;
import com.merck.nlp.model.Role;
import com.merck.nlp.model.User;
import com.merck.nlp.repository.RoleRepository;
import com.merck.nlp.repository.UserRepository;
import com.merck.nlp.exception.RoleNotFoundException;

@Service
public class UserService {

@Autowired
private UserRepository userRepository;

@Autowired
private RoleRepository roleRepository;

@Autowired
private ModelMapper modelMapper;

public User createUser(UserDTO userDTO) {

// modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.LOOSE);

// modelMapper.typeMap(UserDTO.class, User.class).addMappings(mapper -> {
// mapper.skip(User::setRole);
// mapper.map(UserDTO::getCreatedById, (destination, value) -> destination.getCreatedBy().setId((Long)value));
// });

// Map DTO to User entity
// modelMapper.

User user = modelMapper.map(userDTO, User.class);
System.out.println(user.getCreatedBy());
modelMapper.validate();
// Resolve Role
Role role = null;
if (user.getRole().getId() != null) {
role = roleRepository.findById(user.getRole().getId())
.orElseThrow(() -> new RoleNotFoundException("Role not found with ID: " + user.getRole().getId()));
} else if (user.getRole().getName() != null) {
role = roleRepository.findByName(user.getRole().getName());
}
if (role == null) {
// Handle role not found error or set a default role
}
user.setRole(role);

// Save user to repository or perform other operations
return userRepository.save(user);
}
}

полезная нагрузка
{
"firstName": "niresh",
"lastName": "kef",
"email": "niresh@gmail.com",
"xuid":"weffeferfreergerferrrergerer",
"createdById": 1,
"roleId": 1
}

Пользователь.класс
package com.merck.nlp.model;

import java.sql.Timestamp;

import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.CreationTimestamp;

import com.merck.nlp.dto.UserDTO;

import jakarta.persistence.CascadeType;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Table(name = "users")
public class User {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String xuid;

private String firstName;

private String lastName;

private String email;

@ColumnDefault("false")
private Boolean isActive;

@ManyToOne(cascade = CascadeType.MERGE)
@JoinColumn(name = "role_id")
private Role role;

@ManyToOne(cascade = CascadeType.MERGE)
@JoinColumn(name = "created_by")
private User createdBy;

@CreationTimestamp
private Timestamp createdAt;

@ManyToOne(cascade = CascadeType.MERGE)
@JoinColumn(name = "updated_by")
private User updatedBy;

private Timestamp updatedAt;

public User(Long id) {
this.id = id;
}

}


Подробнее здесь: https://stackoverflow.com/questions/788 ... -of-user-u

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