gpt4 book ai didi

java - jpa合并不起作用

转载 作者:行者123 更新时间:2023-11-30 05:11:33 24 4
gpt4 key购买 nike

我在使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com