我可以使用 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 存储库查询来更新该 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);
}

任何建议将不胜感激!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)