我们是否可以基于非主键的存在来保存或更新spring数据jpa,否则我必须使用一个查询来检查是否存在,然后检查是否存在然后进行更新。
答案 0 :(得分:0)
我将转述您的问题,以确保我答对了:
您从具有空主键的实体e1
开始。
除了其他属性外,该实体还有两个属性(A, B)
。
如果已经存在具有相同值(A, B)
的持久实体,则要更新该实体。
否则,您要插入与您的实体e1
相匹配的行。
JPA的标准方法是:
(A, B)
查询。e1
上设置该ID。
保存e1
。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
}