我有一个关于用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应该是唯一的)。
我想避免手动遍历所有文件,获取格式并检查它是否已经存在。
谢谢,我想避免在所有文件中手动迭代,获取格式和检查是否已经存在。
我想避免手动遍历所有文件,获取格式并检查它是否已经存在。
在你目前的模型中,这正是你需要做的:而不是创建一个新的 Format
加载它,只有当失败时才创建一个新的实例.老实说,我不明白为什么你觉得不这样做很重要,因为这似乎是一两行相当琐碎的代码。
另一种选择是将 Format
作为一个嵌入式。下面是一个小教程 关于这个概念,如果你需要。