我有一个REST服务,它使用无状态bean通过使用其他bean来执行算法。 所有这些bean都对我的数据字段进行了更改,包括ManyToOne字段。 在算法结束时,就在我的休息服务“返回”之前,我的数据处于正确的状态,并且所讨论的ManyToOne字段已被更改。 但是在返回休息服务之后,该字段上似乎发生了更新,并将其更改回以前的状态。但其他领域仍处于正确状态。
在我的休息服务“返回”后,有什么可能改变我的数据?
该项目在wildfly环境中使用hibernate和JTA事务。
数据如下所示:
public class Data extends JpaDecorator {
@Column(length=1024)
@Override
public String getCommentaire() {
return getImpl().getCommentaire();
}
@Column(length=1024)
@Override
public void setCommentaire(String value) {
getImpl().setCommentaire(value);
}
}
@MappedSuperclass
public class JpaDecorator<T> {
private WorkspaceJpa workspaceJpa;
private T impl;
@Transient
public T getImpl() {
return impl;
}
@ManyToOne
@JoinColumn(name = "wid", referencedColumnName = "oid")
public WorkspaceJpa getJpaWid() {
return this.workspaceJpa;
}
public void setJpaWid(WorkspaceJpa value) {
this.workspaceJpa = value;
Workspace wks = ((this.workspaceJpa != null) ? this.workspaceJpa.getImpl() : null);
getImpl().setWid(wks);
}
}
编辑: 我终于解决了这个问题。它来自用于在算法开始时收集数据的未闭合事务。该事务一直处于活动状态,直到返回其余服务,然后被迫结束并刷新其数据的状态,这已经过时了。