我得到一个反序列化为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);
}
}
答案 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,因为它不会生成。