@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;
...}
我有我想用弹簧启动CrudRepository坚持一个List<TestPair>
。
TestPair的包含测试的这些测试的是沿着一些TestPair的相同。
当我用白水回收方法,它坚持认为是相等的它插入新的对象,但测试的,创建大量重复的分贝元素。
我已经创建了这个类的equals和hashCode。
检查自动生成逻辑两者的ID。如果是自动增量,那么所有的创建的实体将是不同的,因此新的条目越来越创建每次。
我已经找到了解决办法。
除了使用CRUD白水的一个HashSet,我保留一个接一个。
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;
}
这样,休眠合并的对象,而不是创造新的。谢谢你们!