2017-11-15 24 views
0

ビジネスオブジェクトをエンティティにマップしようとしていますが、この問題を解決する方法がわかりません。エンティティに多対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; 
... } 

CarTypesColorTypesは、データベース内の主キーに対応する番号が割り当てられている列挙型です。

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; 
... } 

答えて

0

はCartype IDに基づいてCartypeエンティティを取得します。たとえば、

CarType carType = em.find(CarType.class、 carTypeId);次いで

そして

carEntity.setCarType(carType)としてCarEntityこのcarTypeを設定します。

em - EntityManager

関連する問題