当我开始使用JPA时,我已经看到错误“org.hibernate.transientPropertyValueException:object references an unsaved transient instance-在刷新之前保存transient instance”。我知道general上的这个错误可以通过添加cascade=CascadeType.all来解决,但在本例中,这个错误出现在域表中,这意味着,在本例中添加CascadeType没有任何意义,因为这个实体在数据库中已经有了Id。
我的代码的相关部分是(还有另一个字段、getters、setters等):
RAC类:
@Entity
@Table(name = "RAC", schema = "SchRAC")
public class Rac {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "RacCod")
private Long idRac;
//anoter fields (...)
@OneToMany(fetch = FetchType.LAZY, mappedBy = "rac", cascade = {CascadeType.ALL})
@JsonManagedReference
private List<RacProvidencia> racProvidencias;
Racprovidencia类:
@Entity
@Table(name = "RACPRO", schema = "SchRAC")
public class RacProvidencia implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "RacProCod")
private Long idRacProvidencia;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "RacCod")
@JsonBackReference //coloquei para evitar a recursao infinita de JSON
private Rac rac;
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.REFRESH)
@JoinColumn(name = "ProCod")
private Providencia providencia;
@NotNull
@Column(name = "RacProNum", length = 100)
private String numero;
@Column(name = "RacProDat")
private Date dataProvidencia;
@Entity
@Table(name = "PRO", schema = "SchRAC")
public class Providencia {
@Id
@Column(name = "ProCod")
private Integer idProvidencia;
@Column(name = "ProDes", length = 50)
private String descricao;
public RacProvidencia adicionarProvidenciaRac(Long codigo, @Valid RacProvidencia racProvidencia) {
Rac rac = this.racRepository.findById(codigo).get();
racProvidencia.setRac(rac);
return racProvidenciaRepository.save(racProvidencia);
}
你有一个双向的关系,但你只设置了关系的一方。
public RacProvidencia adicionarProvidenciaRac(Long codigo, @Valid RacProvidencia racProvidencia) {
Rac rac = this.racRepository.findById(codigo).get();
racProvidencia.setRac(rac);
rac.getRacProvidencias().add(racProvidencia); // <-- This
return racProvidenciaRepository.save(racProvidencia);
}
您的持久性提供者需要这两个方面。
对象引用未保存的瞬态实例 - 在刷新错误之前保存瞬态实例 我有 3 个实体。我将使用一对多关系映射彼此实体。 产品收费详情有 燃料类型有 计算类型具有 我有一个问题,当我保存产品时,它抛出这样一个错误。我试着用@ManyToOne(cascade = CascadeType。ALL)到productChargeDetail,但是当我保存一个产品时,它显示一个来自应用程序的错误复制错误。FuelTy
对象引用未保存的临时实例-在刷新之前保存临时实例。 我有一个2类组织实体和应用实体。组织和应用程序有多对多的关系。 组织实体 申请实体有 组织运作impl。JAVA 我的问题是,我是否使用applicationRepository保存applicationEntity。save(applicationEntity)也会像我的cascade类型一样保存组织。所有的一切都在现场定义。我犯了这个错误。
我有两个例子。一个是项目,一个是模块。< code >一对多关系。 我将模块设置到项目中。然后使用。第一次,因为数据库中没有记录,所以项目和模块可以保存到数据库中。然而,第二次,因为我不需要创建新项目,我只创建新模块,然后将模块设置回项目。 发生异常。 对象引用未保存的瞬态实例 - 在刷新之前保存瞬态实例。 有什么办法可以解决这个问题吗谢谢
上图显示了表之间的关系。 AddressType表包含静态值,如mailing、home、work等。 在AddressTypeRel模型类中,我有一个带有多对一注释的AddressType对象
对于我的问题,我遇到了一些可能的好答案,但这是关于从Hibernate3.4.0ga升级到Hibernate4.1.8的。所以这在以前的版本下是可行的,我已经搜索了上上下下为什么它在这个新版本中被打破了。 我得到一个 这是我的课。
我正在使用Seam Framework。我有2个实体: Request.java 和请求事件.java 当我进行此交易时: 我得到了这个错误: