java - 我可以使用 JPA 存储库查询将元素添加/插入到我的 ElementCollection 中吗?
问题描述
我正在使用基于 H2 文件的数据库编写 Spring Boot 应用程序。我有几个并行运行的线程,所以我试图找到将元素添加到我的实体的嵌入式字符串集的最佳方法 - 一个 ElementCollection。
获取完整实体只是为了修改一个字段并保存整个实体,即使我只更改了一个字段,看起来既笨重又冒险 - 如果另一个线程正在更改关于同一实体的其他内容怎么办 - 我不想覆盖那些不相关的更改。
假设我有一个实体产品:
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class Product {
@Id
private int id;
private String description;
private boolean soldOnline;
@ElementCollection(fetch = EAGER)
private Set<String> statesWhereAvailable = new HashSet();
}
我有一个线程通过并初始化boolean soldOnline
标志,另一个线程通过并添加到人们可以在店内购买此产品的一组不同状态。如果同时更新同一产品,我不希望第二个线程撤消第一个线程中所做的更改,因为它恰好在第一个线程完成保存之前获取实体。
我希望有一种方法可以编写 Jpa Repository 查询来更新该 ElementCollection,但我在任何地方都找不到任何示例。我希望能够写出这样的东西:
@Repository
public interface ProductRepository extends JpaRepository<Product, Integer> {
@Transactional
@Modifying
@Query(value = "update Product p " +
"set i.statesWhereAvailable = i.statesWhereAvailable + :state " +
"where p.id = :id")
void addVendorToRelatedVendors(@Param("id") int id,
@Param("state") String state);
}
任何建议将不胜感激!
解决方案
推荐阅读
- javascript - 在 React Native 中使用 TextInput 更改高度和宽度
- python - 如何使用 Cython 编译依赖模块
- sql - BIGQUERY YTD Sum 计算不正确
- c++ - 一个可以用多个函数假名/同义词调用的函数
- react-native - React native Flatlist 渲染大数据非常慢
- laravel - 使用 nginx 和 xip.io 导致重定向问题
- django - 如何使 Django REST Framework 中的所有超链接相对?
- json - Flutter/Dart:如何访问地图对象中的单个嵌套条目
- javascript - 为什么 while() 构造在 Chrome 调试器中可以正常工作,但在 jsbin 中却不能?
- c# - 如何编写类似于为依赖注入提供的扩展方法?例如:.AddTransient
()?