我是 Spring Boot 新手。我正在尝试做一些例子来学习。
我有 2 个用户“个人资料”和“地址”的权利。 配置文件可以有多个地址。
public class Address {
@Id
private UUID id;
private boolean primaryAddress;
}
和个人资料
@Entity
public class UserProfile {
@Id
private UUID id;
@OneToMany(
fetch = FetchType.EAGER, orphanRemoval = true, cascade = CascadeType.REMOVE
)
@JoinColumn(
name = "profile_id",
foreignKey = @ForeignKey(name = "fk_address_userprofile")
)
private Set<Address> addressList = new HashSet<>();
}
当用户输入地址时,如果它是主地址,我需要将该用户的所有其他地址的primaryAddress字段设置为false
我遇到的问题是在我的地址存储库中如何编写此查询。我尝试了本机查询,但它似乎不起作用。
@Repository
public interface AddressRepository extends JpaRepository<Address, UUID> {
@Modifying
//@Query(value = "UPDATE Address SET primary_address = false WHERE profile_id = ?1", nativeQuery = true)
@Query("UPDATE Address SET primaryAddress=false where UserProfile.id = ?1 ")
void resetPrimaryByUserProfileId(UUID userProfileId);
}
任何人都可以提供一些关于如何执行此操作的帮助吗?
使用 ORM 的要点是允许我们使用 OOP 技术来更新数据库表。所以你可以用OOP的方式来思考,只需将需要的
Address
对象更新到正确的状态,然后让hibernate找出更新SQL是什么,而不是手动编写更新SQL。
所以你可以做类似的事情:
@Entity
public class UserProfile {
public void addAddress(Address addr){
if(addr.primaryAddress){
addressList.forEach(addr->addr.setPrimaryAddress(false));
}
}
}
UserProfile userProfile = userProfileRepository.getById(1);
userPrfile.addAddress(someAddress);
顺便说一下,我有以下代码审查意见: