Java 实体具有多对一关系时的DTO到实体映射
我试图将业务对象映射到实体中,但遇到了问题,不知道如何解决 问题是当我试图将这些属性从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 @
实体的样子:
@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)代码>