使用模型映射器的外键映射

时间:2020-01-29 06:00:42

标签: java json spring-boot modelmapper

我得到一个反序列化为POJO的JSON,我试图使用modelmapper将POJO映射到下面的实体类,并尝试将这些实体保存到数据库中。所有字段都按预期方式映射和保存,除了外键值为空。另外,该用户ID是自动生成的。请问我如何使用modelmapper将用户ID保存在车辆表中?

我的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 :(得分:0)

您可以尝试使注释更具体:

    @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;

我认为您必须删除注释才能自动生成用户ID 根据我的理解,问题是由于在将条目保存到DB时自动生成了userid。但是,当我们将用户ID映射到车辆时,它是null,因为它不会生成。

相关问题