如何映射多对一关系?

问题描述 投票:0回答:1

我在映射多对一关系时遇到问题。当我为一对一创建映射器时,就可以了。

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

如何构建多对一关系的代码【私有列表访问】?

预先感谢您的帮助。

java hibernate relationship
1个回答
0
投票

您需要将

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
中设置患者,否则您将失去返回患者的链接。

© www.soinside.com 2019 - 2024. All rights reserved.