2012-12-19 19 views
0

我收到異常,當我嘗試堅持對象Municipio。 Municipio與Provincia有許多音關係,並與Sector有許多關係。 Provincia不能爲空,但Sector可以爲空。我不知道如何允許該扇區可以爲​​空,因爲當我嘗試保存對象Municipio時拋出異常。Perisiting manyToOne關係可能爲空的錯誤(org.hibernate.TransientObjectException)

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

顯示你的保存/修改代碼 –

+1

問題是與瞬態不是我認爲的'null'。 –

+0

你是如何用null'sector'解決問題的? – Roman

回答

1

的問題是不相關的空對象本身,而是關於OneToMany聲明你的實際實體的結構。

如果我沒有弄錯,你正試圖保存與Sector相關聯的Municipio,之前沒有保存Sector,不是嗎?會發生什麼是Hibernate需要做Municipio和它擁有Sector之間的關聯映射,但是如果後者沒有被持久化,那麼就沒有創建關聯的參考。

嘗試先保存Sector然後Municipio(如果需要,可以使用級聯)。

0

在Municipio嘗試顯式初始化扇區爲空。是的,因爲Sajan要求顯示你的保存/修改代碼。

2

的TransientObjectException來,只要你嘗試保存對象不保存適當Joins.You必須保存部門第一,之後你就可以保存您MUNICIPIO類。

Municipio.setSector(new Sector()); 

利用這一點,你要分配特定部門MUNICIPIO。但是Sector沒有任何ID。兩者如何被映射?這就是例外即將到來的原因。

有關更多詳細信息,請發佈您的保存/更新代碼。

希望它能幫助你。