ビジネスオブジェクトをエンティティにマップしようとしていますが、この問題を解決する方法がわかりません。エンティティに多対1の関係がある場合のDTOへのエンティティのマッピング
問題は、多対1リレーションシップの属性であるDTOからこれらの属性を別のテーブルにマップしようとするときです。
@Entity
@Table(name = "t_car")
public class Car extends AbstractEntity implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Column(name = "pkIdCar")
private Long id;
@Column(nullable = false, columnDefinition="VARCHAR(45)")
private String brand;
@Column(nullable = false)
private Integer productionYear;
@Column(nullable = false)
private Float engineCapacity;
@Column(nullable = false)
private Float power;
@Column(nullable = false)
private Integer distance;
@ManyToOne
@JoinColumn(name = "fkIdType")
private CarType carType;
@ManyToOne
@JoinColumn(name = "fkIdColor")
private Color color;
... }
そしてここDTO
である:ここで
は私Entity
がどのように見えるかです
public class CarDto {
private Long id;
private String brand;
private Integer productionYear;
private Float engineCapacity;
private Float power;
private Integer distance;
private CarTypes carType;
private ColorTypes color;
... }
CarTypes
とColorTypes
は、データベース内の主キーに対応する番号が割り当てられている列挙型です。
REGULAR_TWO_DOOR(1),
REGULAR_FOUR_DOOR(2),
STATION_WAGON(3),
MINIVAN(4),
SPORT(5),
LUXURY(6);
そして、ここで私が書くために管理マッパーである:たとえばCarTypes
のためです。 CarType
(エンティティ)をCarType
プライマリキーに基づいてcarEntity
に割り当てるにはどうすればよいですか?
public class CarMapper {
...
public static Car carDtoToCar(CarDto carDto, Car carEntity) {
if(carEntity == null) {
carEntity = new Car();
}
carEntity.setBrand(carDto.getBrand());
carEntity.setProductionYear(carDto.getProductionYear());
carEntity.setEngineCapacity(carDto.getEngineCapacity());
carEntity.setPower(carDto.getPower());
carEntity.setDistance(carDto.getDistance());
Long carTypeId = Long.valueOf(carDto.getCarType().getNumber());
Long carColorId = Long.valueOf(carDto.getColor().getNumber());
/* ? */
return carEntity;
}
}
CarType
エンティティ:
@Entity
@Table(name = "t_car_type")
public class CarType extends AbstractEntity implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Column(name = "pkIdType")
private Long id;
@Enumerated(EnumType.STRING)
@Column(nullable = false, columnDefinition="VARCHAR(45)")
private CarTypes type;
... }