我在映射多对一关系时遇到问题。当我为一对一创建映射器时,就可以了。
@Entity
@Table(name = "PATIENT")
public class PatientEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String firstName;
@OneToOne(
cascade = CascadeType.ALL,
fetch = FetchType.LAZY,
optional = false
)
private AddressEntity address;
@OneToMany(mappedBy = "patient")
private List<VisitEntity> visit;
我的一对一关系映射器:
public final class PatientMapper {
public static PatientTO mapToTO(final PatientEntity patientEntity)
{
if (patientEntity == null)
{
return null;
}
final PatientTO patientTO = new PatientTO();
patientTO.setId(patientEntity.getId());
patientTO.setFirstName(patientEntity.getFirstName());
final AddressTO addressTO = new AddressTO();
addressTO.setId(patientEntity.getAddress().getId());
addressTO.setCity(patientEntity.getAddress().getCity());
patientTO.setAddress(addressTO);
return patientTO;
}
public static PatientEntity mapToEntity(final PatientTO patientTO)
{
if(patientTO == null)
{
return null;
}
PatientEntity patientEntity = new PatientEntity();
patientEntity.setId(patientTO.getId());
patientEntity.setFirstName(patientTO.getFirstName());
AddressEntity addressEntity = new AddressEntity();
addressEntity.setId(patientTO.getAddress().getId());
addressEntity.setCity(patientTO.getAddress().getCity());
patientEntity.setAddress(addressEntity);
return patientEntity;
}
}
如何构建多对一关系的代码【私有列表
预先感谢您的帮助。
您需要将
List<VisitEntity>
中的 PatientEntity
映射到 List<VisitTO>
中的 PatientTO
,反之亦然。我假设您还有一个在 VisitMapper
和 VisitEntity
之间映射的 VisitTO
。
例如:
import java.util.List;
import java.util.stream.Collectors;
public final class PatientMapper {
public static PatientTO mapToTO(final PatientEntity patientEntity)
{
if (patientEntity == null)
{
return null;
}
final PatientTO patientTO = new PatientTO();
patientTO.setId(patientEntity.getId());
patientTO.setFirstName(patientEntity.getFirstName());
final AddressTO addressTO = new AddressTO();
addressTO.setId(patientEntity.getAddress().getId());
addressTO.setCity(patientEntity.getAddress().getCity());
// Map VisitEntity list to VisitTO list
List<VisitTO> visitTOs = patientEntity.getVisits()
.stream()
.map(VisitMapper::mapToTO)
.collect(Collectors.toList());
patientTO.setVisits(visitTOs);
patientTO.setAddress(addressTO);
return patientTO;
}
public static PatientEntity mapToEntity(final PatientTO patientTO)
{
if(patientTO == null)
{
return null;
}
PatientEntity patientEntity = new PatientEntity();
patientEntity.setId(patientTO.getId());
patientEntity.setFirstName(patientTO.getFirstName());
AddressEntity addressEntity = new AddressEntity();
addressEntity.setId(patientTO.getAddress().getId());
addressEntity.setCity(patientTO.getAddress().getCity());
// Map VisitTO list to VisitEntity list
List<VisitEntity> visitEntities = patientTO.getVisits()
.stream()
.map(VisitMapper::mapToEntity)
.collect(Collectors.toList());
patientEntity.setVisits(visitEntities);
patientEntity.setAddress(addressEntity);
return patientEntity;
}
}
此修改假设您有一个
VisitMapper
类,其中包含用于 mapToTO
和 mapToEntity
的 VisitEntity
和 VisitTO
方法。如果您没有这个,您将需要像您的 AddressMapper
那样创建它。
不过,当您从
VisitEntity
映射到 VisitTO
时,请记住在每个 VisitEntity
中设置患者,否则您将失去返回患者的链接。