Java 实体具有多对一关系时的DTO到实体映射

Java 实体具有多对一关系时的DTO到实体映射,java,hibernate,orm,mapping,Java,Hibernate,Orm,Mapping,我试图将业务对象映射到实体中,但遇到了问题,不知道如何解决 问题是当我试图将这些属性从DTO映射到另一个表时,这些属性是多对一关系的属性 下面是我的实体的样子: @Entity @Table(name = "t_car") public class Car extends AbstractEntity implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue @

我试图将业务对象映射到实体中,但遇到了问题,不知道如何解决

问题是当我试图将这些属性从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

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
是具有与其在数据库中的主键相对应的分配编号的枚举。例如,
CarTypes
是:

REGULAR_TWO_DOOR(1),
REGULAR_FOUR_DOOR(2),
STATION_WAGON(3),
MINIVAN(4),
SPORT(5),
LUXURY(6);
这是我写的地图。如何根据
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;
... }
  • 根据CarType Id获取
    CarType
    实体。例如:
    cartypecartype=entityManager.find(CarType.class,carTypeId)

  • 然后将
    CarEntity
    中的
    carType
    设置为
    carEntity.setCarType(carType)