java - 错误存在可能为空的多对一关系(org.hibernate.TransientObjectException)

标签 java spring hibernate jpa persistence

当我尝试保留对象 Municipio 时,出现异常。 Municipio 与 Provincia 具有多音关系,与 Sector 具有多对一关系。 Provincia 不能为 null,但 Sector 可以为 null。我不知道如何允许该扇区为空,因为当我尝试保存对象 Municipio 时会抛出异常。

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)

市政

/**
* 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;
}


}

最佳答案

每当您尝试保存对象而不保存适当的连接时,都会出现 TransientObjectException。您必须首先保存 Sector,然后才能保存 Municipio 类。

Municipio.setSector(new Sector());

通过使用此功能,您可以将特定的部门分配给Municipio。但扇区没有任何ID。两者如何映射?这就是异常出现的原因。

有关更多详细信息,请发布您的保存/更新代码。

希望对您有帮助。

关于java - 错误存在可能为空的多对一关系(org.hibernate.TransientObjectException),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13956213/

相关文章:

java.lang.RuntimeException : Unable to create service 错误

java - 从 Haxe 调用 Java 函数

java - Spring Boot日志文件相对于jar目录而不是启动目录

java - 你能帮助理解如何使用 JOIN 与 spring-repository 吗?

hibernate - Grails 3.2中的域对象上是否存在默认的gorm list方法的默认最大值

java - 如何使用 Eclipse 连接到带有 Hibernate 的 MySql

java - 如何在 Eclipse 中将 "\n"显示为文本?

java - 如何使用 FileWriter 在文件中附加文本

jquery - 按钮作为取消重定向到上一页

hibernate - spring-hibernate 多用户网络应用程序中的 DAO 范围?