创建新实体时获取联接表

时间:2019-12-04 16:50:27

标签: java spring-boot jpa entity

我有一个Customers表,其中有AddressEmbedded

我还有一个硬编码表Countries,其中已经有每个国家/地区的区域,国家/地区是主键。

我想加入AddressEmbeddedCountries,所以我使用了ManyToOne并将CountryEntity放在AddressEmbedded中。

但是我收到一个错误,认为mapstruct无法生成setCountry

问题是,我该如何制作AddressEmbedded.setCountry(string country)? 应该调用数据库以获取该国家/地区的相应区域,但是在setter中添加数据库调用似乎是错误的。

以下是实体定义:

    @AllArgsConstructor
    @NoArgsConstructor
    @ToString
    @Data
    @Embeddable
    public class AddressEmbedded {

        @ManyToOne(fetch = FetchType.LAZY)
        @JoinColumn(name = "country")
        private CountryEntity country;
    }
    @Data
    @Entity
    @Table(name = "Countries")
    public class CountryEntity {

        @Id
        @Column(name = "country")
        private String country;

        @Column(name = "region")
        private String region;
    }
    @Data
    @Entity
    @Table(name = "Customers")
    public class CustomerEntity {
        @Embedded
        private AddressEmbedded address;
    }

1 个答案:

答案 0 :(得分:0)

这是通过mapstruct映射解决的

    @Mappings(
            @Mapping(target = "address.country", source = "countryEntity")
    )
    CustomerEntity fromSubmitCustomerDetailsRequestToCustomerEntity(SubmitCustomerDetailsRequest request, CountryEntity countryEntity);

    @Mappings(
            @Mapping(target = "address.country", source = "customerEntity.address.country.country")
    )
    GetCustomerDetailsResponse fromCustomerEntityToGetCustomerDetailsResponse(CustomerEntity customerEntity);

我在CountryEntity中有fromSubmitCustomerDetailsRequestToCustomerEntity,因为在我打电话之前,我先确认我有一个存在的国家。