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

处理@OnetoOne映射时的Modelmapper问题

柯栋
2023-03-14

我在使用模型映射器使用@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);

期望在传入站点中更改的所有字段(即来自请求的站点)应替换站点中的现有字段。但是,我从modelmapper中得到一个Stackoverflow错误。

我们是否有办法指示modelmapper跳过站点的字段映射(在“地址”下)?我遇到的所有示例都指向跳过父类本身(即Site)下的字段,而不是Address。我尝试过其他选择,比如小坚果。copyProperties(由Spring提供),但我也没有看到跳过属于子级的字段的选项。

非常感谢,普拉巴尔

共有1个答案

汪文光
2023-03-14

我认为您需要为地址地址的转换创建类型映射,并在其中设置站点,如下所示:

modelMapper
    .createTypeMap(Address.class, Address.class)
    .addMappings(new PropertyMap<Address, Address>() {
        @Override
        protected void configure() {
            skip(destination.getSite());
        }
    });
 类似资料:
  • 我使用DTO和modelMapper是为了不让某些字段可见。我有一个类别实体,可以有子类别 创建类别时,我使用模型: 在此模型中,我希望parentCategoryKeyId与父对象的categoryKeyId匹配。 例如,如果我创建了一个“顶级”类别: 它返回给我: 当我这样做时: 在我的控制器中,我将其余对象传递给DTO层,该层调用服务: 我的类别是基本的POJO: 为我服务: 我的问题是,我

  • 我一直试图通过一个名为Guardian的中间类映射两个用户之间的一些“OneToOne”关系。当我试图检索一个用户(和他的监护人)时,从Glassfish(Open edition V4.0)返回一个内部服务器错误。但是,日志中没有显示任何类型的堆栈跟踪或任何错误。我怀疑问题是我在JPA类中的映射。 启动服务器时,我得到两个与Guardian类有关的警告,但我并不真正理解: 警告:映射到元素[me

  • 问题内容: 我正在尝试使Hibernate @OneToOne注释正常工作,并且在这里没有太大的成功… 假设我有一个名为的表格,看起来像这样: 我有一个看起来像这样的实体: 还有一个类似的,另一个实体看起来像这样: 当我进行读取时,我希望它将返回带有的对象。相反,我得到一个AnnotationException:“引用的属性不是(One | Many)ToOne:mappedBy User.sta

  • 我与ModelMapper框架有麻烦。请解释为什么我看到以下行为。 我在build.gradle有以下依赖性 和一个类客户: 我还有一个地图绘制工具: 还有一个测试 在fred()中,方法输出是非红色的“Customer{name=fred,age=40}”(“Customer{name=null,age=40}”)。你能解释一下为什么吗?为什么我在第一个方法中看不到输出“George”?

  • 我有一个父类和子类,其各自的DTO如下 当我试图将父映射到父映射到父映射到父映射时,我得到了堆栈溢出错误。 请帮我解决这个问题。

  • 我有2个实体:Field和ViewOptions 省略与问题无关的字段和方法