Сопоставление внешнего ключа с использованием модели сопоставления - PullRequest
0 голосов
/ 29 января 2020

Я получаю JSON, который десериализован в POJO, и я пытаюсь сопоставить POJO с классом сущности ниже, используя modelmapper, и пытаюсь сохранить эти сущности в базе данных. Все поля отображаются и сохраняются, как и ожидалось. кроме значения внешнего ключа, который приходит как ноль. Кроме того, идентификатор пользователя генерируется автоматически. Можете ли вы помочь мне, как я могу сохранить идентификатор пользователя в таблице транспортных средств, используя модель карты ??

Мой User Класс сущности

@Entity
@Table(name = "usr")
class User{
    @Id
    @Column(name = "user_id", updatable = false, nullable = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long userId;
        private String username;
        @OneToMany(mappedBy = "user",cascade = CascadeType.ALL)
        private List<Vehicle> vehicles= new ArrayList<>();
        //getters and setters
}

Мой Vehicles Класс сущности:

@Entity
@Table(name = "vehicle")
class Vehicle{
    @Id
    @Column(name = "vehicle_id", updatable = false, nullable = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long vehicleId;
    private String vehicleName;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_fk" , nullable = false)
    private User user;
    //getters and setters 
}

Мой класс ModelMapping:

@Service
public class UserService {

    @Autowired
    private UserDetailsService userDetailsService;

    public void saveUserDetails(UserDetails userDetails
        User targetuser{
            UserDetails sourcePojo= userDetails
            User  targetEntity= targetuser
            ModelMapper modelMapper = new ModelMapper();
            modelMapper.map(sourcePojo, targetEntity);

            userDetailsService.save(targetEntity);
    }
}

1 Ответ

0 голосов
/ 29 января 2020

Вы можете попробовать сделать аннотацию более точной c это:

    @OneToMany(mappedBy = "user", 
               targetEntity = Vehicle.class,
               cascade = CascadeType.ALL)
    private List<Vehicle> vehicles= new ArrayList<>();

И

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_fk" , 
                referencedColumnName = "user_id",
                nullable = false)
    private User user;

И я думаю, что вам нужно удалить аннотацию для автоматической генерации идентификатора пользователя. мое понимание проблемы связано с автоматической генерацией идентификатора пользователя выполняется при сохранении записи в БД. Но когда мы сопоставили идентификатор пользователя с транспортным средством, он становится нулевым, поскольку не генерируется.

...