2016-11-29 23 views
0

我得到這個錯誤列'idEscala'不能爲空當我嘗試保存valoracio。但是我已經擁有Escala的id了。爲什麼在嘗試保存時檢測到idEscala爲空?

這是什麼錯誤?

方法保存valoracio

public Valoracio createValoracio(Escala escala, long idResident, long idUser) { 
    logger.info("----------------initValoracio escala: " + escala); 
    Valoracio valoracio = new Valoracio(escala, idResident, idUser); 
    logger.info("----------------initValoracio valoracio: " + valoracio); 

    preguntes = escalaPreguntaMgr.findByEscalaId(escala.getId()); 
    logger.info("----------------initValoracio num(" + preguntes.size() + ") pregunta: " + preguntes.get(0)); 

    ValoracioItem vitem = new ValoracioItem(valoracio, preguntes.get(0)); 
    vitem.setPregunta(preguntes.get(0)); 
    valoracio.addValoracioItem(vitem); 
    logger.info("----------------initValoracio before save valoracio(idEscala): " + valoracio.getEscala().getId()); 
    logger.info("----------------initValoracio before save vitem: " + vitem); 
    valoracioMgr.save(valoracio); 

    return valoracio; 
} 

Valoracio實體

@Entity 
@Table(name = "t_valoracio") 
public class Valoracio extends BaseEntity { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    @ManyToOne 
    @Basic(optional = false) 
    @JoinColumn(name = "idEscala", referencedColumnName = "id") 
    private Escala escala; 

Escala的實體

@Entity 
@Table(name = "a_escala") 
public class Escala extends BaseEntity { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    @OneToMany(mappedBy = "escala") 
    private Collection<Valoracio> valoracions = new HashSet(); 

EscalaManager方法

public Escala save(Escala escala) { 
    return this.em.merge(escala); 
} 

錯誤

11:11:47,557 INFO [stdout] (default task-71) Hibernate: 
11:11:47,557 INFO [stdout] (default task-71)  /* insert es.imas.gestresi.business.pia.entity.Valoracio 
11:11:47,557 INFO [stdout] (default task-71)   */ insert 
11:11:47,557 INFO [stdout] (default task-71)   into 
11:11:47,557 INFO [stdout] (default task-71)    t_valoracio 
11:11:47,557 INFO [stdout] (default task-71)    (dataAlta, idEscala, idResidentKronos, idUser, observacio, version) 
11:11:47,557 INFO [stdout] (default task-71)   values 
11:11:47,557 INFO [stdout] (default task-71)    (?, ?, ?, ?, ?, ?) 
11:11:47,558 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-71) SQL Error: 1048, SQLState: 23000 
11:11:47,558 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-71) Column 'idEscala' cannot be null 

回答

0

的問題是,保存()被調用實體管理方法,該方法合併保存的對象,在這種情況下,因爲該電梯沒有保存,它已經沒有ID。 在這種情況下,當對象仍然沒有ID時,有必要使用方法代替

更改方法保存對於堅持當對象沒有ID時。

相關問題