jpa 创建新实体同时删除具有相同唯一键的旧实体
jpa creating new entity while deleting old one that has the same unique key
我有实体 zika1
public class zika1 {
@Id
int id;
String sika;
@OneToMany(cascade=CascadeType.ALL,orphanRemoval=true)
@JoinColumn
List<zika2> zikas=new ArrayList<zika2>();}
和实体 zika2
@Table(name = "zika2", uniqueConstraints = @UniqueConstraint(columnNames = { "b" }))
public class zika2 {
@Id
String a;
@Column(unique=true)
String b;}
和这个方法:
public void testuniqu()
{
zika1 zik=super.find(1);
zika2 zik22=new zika2();
zik22.setA("karkar");
zik22.setB(zik.getZikas().get(0).getB());
zik.getZikas().remove(0);
zik.getZikas().add(zik22);
super.save(zik);
}
这引发了唯一约束异常,但实际上我正在删除第一个实体。所以 jpa(eclipse link) 没有在同一个数据库事务中运行这个操作。
有没有办法告诉 jpa 在新 zika2 实体的插入操作之前运行删除?
我认为这是一个正常的流程,因为 EclipseLink 不会按您编写的顺序执行命令。所以你需要告诉EclipseLink一些提示,"delete"操作应该是第一个。根据 :
http://wiki.eclipse.org/Using_Advanced_Unit_of_Work_API_%28ELUG%29#How_to_Use_the_setShouldPerformDeletesFirst_Method_of_the_Unit_of_Work,你应该使用 setShouldPerformDeleteFirst.
我有实体 zika1
public class zika1 {
@Id
int id;
String sika;
@OneToMany(cascade=CascadeType.ALL,orphanRemoval=true)
@JoinColumn
List<zika2> zikas=new ArrayList<zika2>();}
和实体 zika2
@Table(name = "zika2", uniqueConstraints = @UniqueConstraint(columnNames = { "b" }))
public class zika2 {
@Id
String a;
@Column(unique=true)
String b;}
和这个方法:
public void testuniqu()
{
zika1 zik=super.find(1);
zika2 zik22=new zika2();
zik22.setA("karkar");
zik22.setB(zik.getZikas().get(0).getB());
zik.getZikas().remove(0);
zik.getZikas().add(zik22);
super.save(zik);
}
这引发了唯一约束异常,但实际上我正在删除第一个实体。所以 jpa(eclipse link) 没有在同一个数据库事务中运行这个操作。 有没有办法告诉 jpa 在新 zika2 实体的插入操作之前运行删除?
我认为这是一个正常的流程,因为 EclipseLink 不会按您编写的顺序执行命令。所以你需要告诉EclipseLink一些提示,"delete"操作应该是第一个。根据 : http://wiki.eclipse.org/Using_Advanced_Unit_of_Work_API_%28ELUG%29#How_to_Use_the_setShouldPerformDeletesFirst_Method_of_the_Unit_of_Work,你应该使用 setShouldPerformDeleteFirst.