仅保存而不使用数据JPA和CrudRepository更新

时间:2018-12-08 07:41:40

标签: java spring hibernate spring-data-jpa

我的应用程序中有一种情况要保存新记录。我正在使用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
}

让我们说一下,每次用于保存操作的数据都包含新数据以及已保存的旧数据。现在我们只想保存新数据。

2 个答案:

答案 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-