通过 spring 数据 jpa 中的@Query 更新实体内的关联对象

Update associated object inside Entity via @Query in spring data jpa

我想通过 spring 数据 JPA 的@Query 更新实体内的关联对象。 可以这样做吗?

@Entity
@Getter
@Setter
public class Person{
   
   @Id
   private Long id;
   
   @OneToOne
   @NotNull
   @JoinColumn(name = "address")
   private Address address;
}
@Entity
@Getter
@Setter
public class Address{
   
   @Id
   private Long id;
   
   private String state;
}

我在 Internet 上看到的所有示例都指向使用 String、int 等更新查询 我正在寻找一种更新查询的方法,我可以在其中传递自定义关联对象。

@Modifying
@Query("update Person p set p.address =: address)
void update(@Param(value = "address") Address address)

可能吗?我也尝试过使用 JPA 的 EntityManagersave() 方法,但我正在寻找上述类型的 JPQL 查询。

以下将更新所有 Person 个实体的地址。

@Transactional
@Modifying
@Query("update Person p set p.address = :address")
void update(@Param(value = "address") Address address)

注意 @Transactional 注释并确保 Address address 参数不应该是瞬态的,即应该已经存在于数据库中并从那里获取它

Address address = new Address();
address.setState("blabla");
Address savedAddress = addressRepository.save(address);

personRepository.update(savedAddress); // use the peristed Address entity here.