Java 实例x的标识符已被PK更改

Java 实例x的标识符已被PK更改,java,Java,我有这个零件代码: for (final CbcustomertaxEntity c : cbcustomertaxEntityList) { if (TaxTypeCode.VAT_PAYERS.getValue().equals(c.getTaxtypeCode())) { final CbcustomertaxEntity queryResult = cbcustomertaxDAO.getCbcustomert

我有这个零件代码:

  for (final CbcustomertaxEntity c : cbcustomertaxEntityList) {
                if (TaxTypeCode.VAT_PAYERS.getValue().equals(c.getTaxtypeCode())) {

                    final CbcustomertaxEntity queryResult = cbcustomertaxDAO.getCbcustomertax(c.getId().getCustomerId(),
                            c.getId().getValidfrom());

                    final CbcustomertaxEntityPK cbcustomertaxEntityPK = new CbcustomertaxEntityPK();
                    cbcustomertaxEntityPK.setCustomerId(queryResult.getId().getCustomerId());
                    cbcustomertaxEntityPK.setValidfrom(date);

                    queryResult.setId(cbcustomertaxEntityPK);
                    queryResult.setTaxtypeCode(TaxTypeCode.OTHERS.getValue());

                    queryResult.setCreated(date);
                    queryResult.setCreatedBy(ccustomerident.getCreatedBy());

                    cbcustomertaxDAO.persist(queryResult);

                }
            }
第一种方法是仅获取:

cbcustomertaxDAO.getCbcustomertax(c.getId().getCustomerId(),
                            c.getId().getValidfrom());


final CriteriaQuery<CbcustomertaxEntity> criteriaQuery = builder.createQuery(CbcustomertaxEntity.class);
final Root<CbcustomertaxEntity> cbcustomertax = criteriaQuery.from(CbcustomertaxEntity.class);

final Expression<CbcustomertaxEntityPK> expression = cbcustomertax.get("id");
final CbcustomertaxEntityPK pk = new CbcustomertaxEntityPK();
pk.setCustomerId(customerId);
pk.setValidfrom(validFrom);

final Predicate predicate = expression.in(pk);

criteriaQuery.where(predicate);

final List<CbcustomertaxEntity> queryResult = entityManager.createQuery(criteriaQuery).getSingleResult();
cbcustomertaxDAO.getCbcustomertax(c.getId().getCustomerId(),
c、 getId().getValidfrom());
final CriteriaQuery CriteriaQuery=builder.createQuery(CbcustomertaxEntity.class);
最终根cbcustomertax=criteriaQuery.from(CbcustomertaxEntity.class);
最终表达式=cbcustomertax.get(“id”);
最终CbcustomertaxEntityPK=新的CbcustomertaxEntityPK();
pk.setCustomerId(customerId);
pk.setValidfrom(validFrom);
最终谓词=表达式.in(pk);
criteriaQuery.where(谓词);
最终列表queryResult=entityManager.createQuery(criteriaQuery).getSingleResult();
它第一次持续存在,但第二次出现错误: 实例X的标识符已从Y更改为X。 我添加了
@Transactional
,但它并没有解决我的问题……有什么建议可以避免这种情况吗