java - jpa合并不起作用

标签 java orm jpa merge

我在使用 JPA 合并对象时遇到问题。我的代码是这样的。

EntityTransaction entr = em.getTransaction();

entr.begin();

Query q = em
  .createQuery("SELECT filterName FROM IbFilterName filterName where"
    + " filterName.filterId = 42352 ");

List<IbFilterName> filterNameList = q.getResultList();

for(IbFilterName filterName : filterNameList){
   String values = filterName.getFilterValues();
   filterName.setFilterValues(values+"Saranya");
   em.merge(filterName);
}

entr.commit();

我的实体是

 @Id
 @SequenceGenerator(name = "IB_FILTER_NAMES_FILTERID_GENERATOR", sequenceName = "IB_LOGIN_HISTORY_SEQ")
 @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "IB_FILTER_NAMES_FILTERID_GENERATOR")
 @Column(name = "FILTER_ID")
 protected long filterId;

 @Column(name = "EXTERNAL_USER")
 protected String externalUser;

 @Column(name = "FILTER_NAME")
 protected String filterName;

 @Column(name = "FILTER_VALUES")
 protected String filterValues;

 // bi-directional many-to-one association to IbPortfolioFilterMapping
 @OneToMany(mappedBy = "ibFilterName")
 private Set<IbPortfolioFilterMapping> ibPortfolioFilterMappings;

当我运行测试用例时,合并不会更新我的过滤器名称对象,JPA 不会在控制台中触发任何查询。

任何人都可以告诉我我做错了什么吗?

最佳答案

您确定第一个查询实际上正在检索记录吗? IMO,此查询需要一个 long 作为参数。

此外,由于您的实体没有分离,我建议不要调用合并并让 JPA 自动检测并刷新更改:

em.getTransaction().begin();

Query q = em
  .createQuery("SELECT filterName FROM IbFilterName filterName WHERE"
    + " filterName.filterId = :id ").setParameter("id", 42352L);

List<IbFilterName> filterNameList = q.getResultList();

for(IbFilterName filterName : filterNameList){
    String values = filterName.getFilterValues();
    filterName.setFilterValues(values + "Saranya");
    //em.merge(filterName); // DON'T
}

em.getTransaction().commit();

关于java - jpa合并不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3211354/

相关文章:

java - 如何在 Hibernate 中设置只读列?

java - ManyToMany映射(辅助表)+额外字段+复合主键

java - Jersey 2 请求过滤器在此代码中不起作用

java - 如何在 hql/hibernate 中的值集中使用 equals?

java - JPA @ElementCollection : How to hold insertion order

java - JPQL 中有 "SELECT 1"吗?

java - JPQL 的 INNER JOIN 问题(即使 SQL 请求正在运行)

java - Jsoup 解析非空替代文本

java - 使用扫描仪将字符串存储在数组中

python - flask 和 Redis