当前位置: 首页 > 知识库问答 >
问题:

创建新实体时获取联接表

松增
2023-03-14

我有一个客户表,其中包含AddressEmbedded

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

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

但是我得到了一个mapstruct无法生成的错误。

所以问题是,我如何使AddressEmbedded。设置国家(字符串国家)?它应该调用db来获取该国家的相应地区,但在setter中添加db调用似乎是错误的。

以下是实体定义:

    @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;
    }
java prettyprint-override">    @Data
    @Entity
    @Table(name = "Customers")
    public class CustomerEntity {
        @Embedded
        private AddressEmbedded address;
    }

共有1个答案

黎鹤轩
2023-03-14

这个问题用mapstruct映射解决了

java prettyprint-override">    @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);

我在SubmitCustomerDetailsRequesttoCustomerEntity中有CountryEntity,因为在调用它之前,我验证了我有一个存在的国家。

 类似资料:
  • 我试图理解为什么persist()的行为在许多情况下是不同的,首先是持久化一个新实体,其次是修改该实体。我的测试设置有一名员工,他与部门有一个单向的多人对话;部门与员工之间没有关系。对于测试,我在Employee中的Department字段上没有任何级联注释。 我发现,在创建员工时,我必须调用em.persist(dept),否则dept实例不会持久化,我会得到一个异常。因此,我调用em.pers

  • 我正在尝试使用一个不是很简单的关联表在两个JPA实体之间进行ManyTo许多连接。我想知道是否有一种方法可以在不创建关联表实体的情况下实现这一点(类似于使用@JoinTable)。 表A-ID(PK) -名称 表b -ID(PK) -名称 TableMapping-ID(PK) -Parent\u ID(FK)-- 映射以我上面描述的方式存储,原因我不知道,也无法更改。很多地方都在这样使用它,我必

  • 如果我只传递一个字符串,而不是的列表: 我得到的是:

  • 假设我在前面有一个表单,它有常用的字段和下拉列表。在这些下拉列表中,用户可以选择一个选项,并且每个选项都链接到Spring data JPA中的一个实体; 下拉列表包含一些标签和对应实体的链接作为值。然后,这个值在POST-request中传递给我们希望创建的实体的PagingAndSorting存储库。 假设它是一个具有username的用户,并且他必须与其中一个办公室(也是一个实体)关联: 我

  • 问题内容: 我正在使用Spring mvc Web应用程序,需要在其中使用Hibernate创建城镇。以下是我的城镇模型。 我还有一个名为区的实体。镇是区的一部分,一个区可以有多个镇。以下是我的区域模型: 我正在使用以下Hibernate代码保存城镇: 但是显示错误: 问题答案: 错误消息指出: 您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第1行的“ des

  • 是否有方法使用BigQueryJavaAPI获取表创建时间?目前,我看到您只能获取datasetid、projectid和tableid。 我的用例:我有一个每天创建一个表格的程序。有时这个程序一天运行不止一次。我想添加一个检查,看看是否已经为这个日期创建了表,如果是,忽略重新创建它。出于各种其他原因,我不能将创建时间附加到tableid上。