java.lang.IllegalStateException: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: es.caib.biocides.persistence.Municipio.sector -> es.caib.biocides.persistence.Sector
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:611)
at org.hibernate.ejb.AbstractEntityManagerImpl$1.beforeCompletion(AbstractEntityManagerImpl.java:513)
MUNICIPIO
/**
* The persistent class for the BCD_MUNICIPIO database table.
*
*/
@Entity
@Table(name="BCD_MUNICIPIO")
public class Municipio implements Serializable {
@Id
@SequenceGenerator(name="BCD_MUNICIPIO_MUNCODIGO_GENERATOR", sequenceName="BCD_MUN_SEQ")
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="BCD_MUNICIPIO_MUNCODIGO_GENERATOR")
@Column(name="MUN_CODIGO")
private Long munCodigo;
@Column(name="MUN_NOMBRE")
private String munNombre;
//bi-directional many-to-one association to Provincia
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="MUN_CODPRV")
private Provincia provincia;
//bi-directional many-to-one association to Sector
@ManyToOne(fetch=FetchType.LAZY, optional=true)
@JoinColumn(name="MUN_CODSEC", nullable=true)
private Sector sector;
public Municipio() {
}
public Long getMunCodigo() {
return this.munCodigo;
}
public void setMunCodigo(Long munCodigo) {
this.munCodigo = munCodigo;
}
public String getMunNombre() {
return this.munNombre;
}
public void setMunNombre(String munNombre) {
this.munNombre = munNombre;
}
public Provincia getProvincia() {
return this.provincia;
}
public void setProvincia(Provincia provincia) {
this.provincia = provincia;
}
public Sector getSector() {
return this.sector;
}
public void setSector(Sector sector) {
this.sector = sector;
}
}
扇区
/**
* The persistent class for the BCD_SECTOR database table.
*
*/
@Entity
@Table(name="BCD_SECTOR")
public class Sector implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@SequenceGenerator(name="BCD_SECTOR_SECCODIGO_GENERATOR", sequenceName="BCD_SEC_SEQ")
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="BCD_SECTOR_SECCODIGO_GENERATOR")
@Column(name="SEC_CODIGO")
private Long secCodigo;
@Column(name="SEC_NOMBRE")
private String secNombre;
//bi-directional many-to-one association to Municipio
@OneToMany(mappedBy="sector")
private List<Municipio> municipios;
public Sector() {
}
public Long getSecCodigo() {
return this.secCodigo;
}
public void setSecCodigo(Long secCodigo) {
this.secCodigo = secCodigo;
}
public String getSecNombre() {
return this.secNombre;
}
public void setSecNombre(String secNombre) {
this.secNombre = secNombre;
}
public List<Municipio> getMunicipios() {
return this.municipios;
}
public void setMunicipios(List<Municipio> municipios) {
this.municipios = municipios;
}
}
答案 0 :(得分:2)
只要您尝试保存对象而不保存相应的连接,就会出现TransientObjectException。您必须首先保存扇区,之后您可以保存 Municipio 类。< / p>
Municipio.setSector(new Sector());
通过使用此功能,您可以将特定的扇区分配给 Municipio 。但扇区没有任何ID。如何映射?这就是异常即将到来的原因。
有关详细信息,请发布您的保存/更新代码。
希望它会对你有所帮助。
答案 1 :(得分:1)
问题与null对象本身无关,而与您关于OneToMany
声明的实际实体的结构有关。
如果我没有弄错的话,您是在尝试保存与Municipio
相关联的Sector
而未事先保存Sector
,不是吗? ?。会发生什么事情是Hibernate需要在Municipio
和它拥有Sector
之间进行关联映射,但如果后者没有持久化,那么就没有引用来创建关联。
首先尝试保存Sector
,然后保存Municipio
(如果需要,可以使用级联)。
答案 2 :(得分:0)
在Municipio中尝试将扇区初始化为null。是的,因为Sajan要求显示您的保存/修改代码。