我的应用程序中有一种情况要保存新记录。我正在使用Crudrepository save()方法。我们都知道,如果记录不存在,那么save()将保存什么,如果找到则更新。
但是我想限制Update操作。就像记录已经可用一样,两个更新都不会保存该记录。
下面说说我们的Entity类具有复合键。并根据组合键进行此操作。
实体类
@Entity
@IdClass(PrescriptionKey.class)
public class Prescription implements Serializable{
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="prescription_id")
private int prescriptionId;
@Id
@Column(name="dose_id")
private int doseId;
@Id
@Column(name="med_id")
private int medId;
//Setter Getters
}
复合键类
public class PrescriptionKey implements Serializable {
private int doseId;
private int medId;
//Setter Getter
}
让我们说一下,每次用于保存操作的数据都包含新数据以及已保存的旧数据。现在我们只想保存新数据。
答案 0 :(得分:0)
有时可能找不到您要更新的处方ID。由jpa提供的自动生成的prescriptionId小于您尝试更新的prescriptionId。因此,JPA使用自动生成的scriptionId而不是要尝试更新的prescriptionId来创建新记录。
答案 1 :(得分:0)
这确实是一个好问题。我想知道为什么JPA存储库中没有这样的功能。好吧,目前,您可以依靠EntityManager
来完成此工作。
entityManager.persist(entityName);
这将确保仅发生保存操作。根据文档-如果实体已经保存,它将抛出EntityExistsException
。
参考:https://docs.oracle.com/javaee/7/api/javax/persistence/EntityManager.html#persist-java.lang.Object-