<button>stop loop</button>
<video src="" muted="false" controls autoplay>
我有一个@Entity
public class TestPair implements Serializable {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private Long id;
@OneToOne(cascade = {CascadeType.ALL})
@JsonProperty("target_Test")
private Test targetTest;
@OneToOne(cascade = {CascadeType.ALL})
@JsonProperty("source_Test")
private Test sourceTest;
...}
@Entity
public class Test {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private Long id;
private String name;
private String shortname;
...}
,我想使用Spring Boot CrudRepository保持不变。
TestPair的含有试验的这些试验的是相同的沿的一些TestPair的。
的当我使用saveAll方法时,它将保留对象,但是相等的Test将插入新对象,并在db中创建许多重复元素。
我已经为此类创建了equals和hashcode。
答案 0 :(得分:0)
检查自动生成逻辑两者的ID。如果它是自动增量的,那么所有创建的实体将是不同的,因此每次都会创建新条目。
答案 1 :(得分:0)
我找到了解决方法。
我没有在哈希表中使用原始的saveAll,而是一一保存。
for(TestPair tPair : TPairs){
testRepository.save(tPair.getSourceTest());
testRepository.save(tPair.getTargetTest());
testPairRepository.save(tPair);
}
并将类更改为:
@Entity
public class TestPair implements Serializable {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private Long id;
@OneToOne(cascade = {CascadeType.MERGE})
@JsonProperty("target_Test")
private Test targetTest;
@OneToOne(cascade = {CascadeType.MERGE})
@JsonProperty("source_Test")
private Test sourceTest;
}
@Entity
public class Test {
private String name;
@Id
private String shortname;
}
通过这种方式,休眠将对象合并,而不创建新对象。谢谢大家!