如果子对象不存在,Spring Hibernate就会进行创建

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

我有一个关于用Spring Hibernate保存子对象的问题,希望你能给我一个提示。已经在Stackoverflow上搜索过了,但我找不到任何适合我的用例。

我有两个类。

Class File {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
  @JoinColumn(name = "format_id")
  private Format format;
}

Class Format {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  @Column(name = "puid")
  private String puid;
}

当我读取一个XML文件时...

<files>
    <file>
        <name>abc</name>
        <format>pdf</format>
    </file>
    <file>
        <name>xyz</name>
        <format>pdf</format>
    </file>
</files>

.. 我创建类文件的对象,并进行相应的格式化。最后我将调用 fileRepository.savaAll();

我的问题是,现在我在MySQL数据库中有两种格式,尽管它们是一样的。有没有一种方法(也许是通过注释),只为子元素创建新的数据库元素,如果不存在(puid应该是唯一的)。

我想避免手动遍历所有文件,获取格式并检查它是否已经存在。

谢谢,我想避免在所有文件中手动迭代,获取格式和检查是否已经存在。

java mysql hibernate spring-data-jpa
1个回答
1
投票

我想避免手动遍历所有文件,获取格式并检查它是否已经存在。

在你目前的模型中,这正是你需要做的:而不是创建一个新的 Format 加载它,只有当失败时才创建一个新的实例.老实说,我不明白为什么你觉得不这样做很重要,因为这似乎是一两行相当琐碎的代码。

另一种选择是将 Format 作为一个嵌入式。下面是一个小教程 关于这个概念,如果你需要。

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