在Spring Data JPA中,我们如何基于非主键的存在来保存或更新

时间:2019-03-06 05:54:40

标签: spring spring-boot spring-data-jpa

我们是否可以基于非主键的存在来保存或更新spring数据jpa,否则我必须使用一个查询来检查是否存在,然后检查是否存在然后进行更新。

2 个答案:

答案 0 :(得分:0)

我将转述您的问题,以确保我答对了:

您从具有空主键的实体e1开始。 除了其他属性外,该实体还有两个属性(A, B)

如果已经存在具有相同值(A, B)的持久实体,则要更新该实体。 否则,您要插入与您的实体e1相匹配的行。

JPA的标准方法是:

  1. 使用(A, B)查询。
  2. 如果您重新获得实体,请在e1上设置该ID。 保存e1
  3. 如果没有找回实体,请保存e1

当然,这完全是您要避免的查询。

或者,您可以使用@Query注释执行更新语句,并检查更新计数。 如果为0,则将e1另存为新实体。

为此,您需要指定所有要更新的字段,并且它实际上不适用于级联(即,属性本身就是实体本身)。

答案 1 :(得分:0)

您已经说过要基于非主键更新或保存用户,下面是使用Jpa进行操作的示例

引用Jpa Doc


 public class User {
        private String firstName;
        private String lastName;
    }

User user = userRepository.findByFirstnameAndLastname();
if(user==null)
{
    //Save New User
}
else
{
    //Update Your User
}

public interface UserRepository extends JpaRepository<User, Long> {
@Query(value = "SELECT * FROM TableName WHERE firstname = ?1 AND lastname = ?2", nativeQuery = true)
User findByFirstnameAndLastname(String firstName,String lastName);

//your Update Query
}