【问题标题】:Modelmapper issue while handling @OnetoOne mapping处理 @OnetoOne 映射时的 Modelmapper 问题
【发布时间】:2021-07-14 04:55:19
【问题描述】:

我在使用 modelmapper 使用 @OneToOne 执行父子实体更新时遇到问题。

说明如下

父类

@Data
@Entity
@Table (name = "site")
public class Site {

  @Id
  @JsonIgnore
  @Column(name = "internal_id")
  private long internalId;

  @Column(name = "internal_uuid")
  private String internalUUID;

  @OneToOne(mappedBy = "site", cascade = CascadeType.ALL)
  private Address address;

  // Some other stuff
}

儿童班

@Data
@Entity
@Table(name = "address")
public class Address {

  @Id
  @JsonIgnore
  @Column(name = "internal_id")
  private Long internalId;

  @JsonIgnore
  @OneToOne
  @JoinColumn(name = "site_uuid", referencedColumnName = "internal_uuid")
  private Site site;

  // Some other stuff  
}

通过这种安排,我能够成功地创建和查询站点 + 地址组合。但是,我在进行更新时遇到了问题。我正在尝试使用 modelmapper 语句更新站点或地址,如下所示:

modelmapper.map(site_from_request, site_existing_in_db);

期望在传入站点(即 site_from_request)中更改的所有字段都应替换 site_existing_in_db 中的现有字段。但是,我从 modelmapper 收到 Stackoverflow 错误。

有没有一种方法可以指示模型映射器跳过站点的字段映射(在地址下)?我遇到的所有示例都指向跳过父类本身(即站点)下的字段,而不是地址。 我已经尝试过诸如 BeanUtils.copyProperties(由 Spring 提供)之类的替代方法,但我也没有看到跳过属于孩子的字段的选项。

非常感谢, 普拉巴尔

【问题讨论】:

    标签: java spring-data-jpa modelmapper


    【解决方案1】:

    我相信您需要为AddressAddress 的转换创建一个TypeMap,并在其中设置Site 跳过,比如:

    modelMapper
        .createTypeMap(Address.class, Address.class)
        .addMappings(new PropertyMap<Address, Address>() {
            @Override
            protected void configure() {
                skip(destination.getSite());
            }
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多