2014-11-07 79 views
0

嗨我的關係拋出@EmbeddedId拋出IdIdentifierGenerationException:空ID。任何建議,歡迎。這是我的代碼:@EmbeddedId拋出IdIdentifierGenerationException:即使與@GeneratedValue生成的空ID(戰略= GenerationType.AUTO)

TABLE ACTIVIDADES(  
    CODIGO CHAR(10) NOT NULL UNIQUE, 
    NOMBRE VARCHAR(50) UNIQUE, 
    PRIMARY KEY(CODIGO) 
)ENGINE=INNODB; 


CREATE TABLE EVENTOS_ACTIVIDADES(
     ID INT AUTO_INCREMENT,    
     CODIGO_ACTIVIDADES CHAR(10) NOT NULL UNIQUE,    
     PRIMARY KEY(ID,CODIGO_ACTIVIDADES),         
     FOREIGN KEY(CODIGO_ACTIVIDADES) REFERENCES ACTIVIDADES(CODIGO) ON DELETE CASCADE ON UPDATE CASCADE 

)ENGINE=INNODB; 

這裏是我的JPA實體:

@Entity 
@Table(name = "eventos_actividades", catalog = "capacitacion_csg", uniqueConstraints = @UniqueConstraint(columnNames = "CODIGO_ACTIVIDADES")) 

public class EventosActividades implements java.io.Serializable { 

    private EventosActividadesId id; 
    private Actividades actividades;  

    public EventosActividades() { 
    } 

    @EmbeddedId 
    @AttributeOverrides({ 
     @AttributeOverride(name = "id", column = @Column(name = "ID", nullable = false)), 
     @AttributeOverride(name = "codigoActividades", column = @Column(name = "CODIGO_ACTIVIDADES", unique = true, nullable = false, length = 10)) }) 
    public EventosActividadesId getId() { 
     return this.id; 
    } 

    public void setId(EventosActividadesId id) { 
     this.id = id; 
    } 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "CODIGO_ACTIVIDADES", unique = true, nullable = false, insertable = false, updatable = false) 
    public Actividades getActividades() { 
     return this.actividades; 
    } 

    public void setActividades(Actividades actividades) { 
     this.actividades = actividades; 
    } 


@Entity                    
@Table(name="ACTIVIDADES", catalog="CAPACITACION_CSG", uniqueConstraints = {@UniqueConstraint(columnNames="NOMBRE"),                   @UniqueConstraint(columnNames="CODIGO")}) 
public class Actividades { 

    private String codigo; 
    private String nombre; 
    private List<EventosActividades> eventosActividades; 


    @Column(name="NOMBRE",unique=true,nullable=false,length=50) 
    public String getNombre() { 
     return nombre; 
    } 

    @Id 
    @Column(name="CODIGO",unique=true,nullable=false,length=10) 
    public String getCodigo() { 
     return codigo; 
    } 

    public void setCodigo(String codigo) { 
     this.codigo = codigo; 
    } 

    public void setNombre(String nombre) { 
     this.nombre = nombre; 
    } 

    @OneToMany(fetch= FetchType.EAGER,mappedBy="actividades",cascade=CascadeType.ALL) 
    public List<EventosActividades> getEventosActividades() { 
     return eventosActividades; 
    } 

    public void setEventosActividades(List<EventosActividades> eventosActividades) { 
     this.eventosActividades = eventosActividades; 
    } 
} 

@Embeddable 
public class EventosActividadesId implements java.io.Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int id; 
    private String codigoActividades; 

    public EventosActividadesId() { 
    } 

    public EventosActividadesId(int id, String codigoActividades) { 
     this.id = id; 
     this.codigoActividades = codigoActividades; 
    } 

    @Column(name = "ID", nullable = false) 
    public int getId() { 
     return this.id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    @Column(name = "CODIGO_ACTIVIDADES", unique = true, nullable = false, length = 10) 
    public String getCodigoActividades() { 
     return this.codigoActividades; 
    } 

    public void setCodigoActividades(String codigoActividades) { 
     this.codigoActividades = codigoActividades; 
    } 

    public boolean equals(Object other) { 
     if ((this == other)) 
      return true; 
     if ((other == null)) 
      return false; 
     if (!(other instanceof EventosActividadesId)) 
      return false; 
     EventosActividadesId castOther = (EventosActividadesId) other; 

     return (this.getId() == castOther.getId()) 
       && ((this.getCodigoActividades() == castOther 
        .getCodigoActividades()) || (this 
        .getCodigoActividades() != null 
        && castOther.getCodigoActividades() != null && this 
        .getCodigoActividades().equals(
          castOther.getCodigoActividades()))); 
    } 

    public int hashCode() { 
     int result = 17; 

     result = 37 * result + this.getId(); 
     result = 37 
       * result 
       + (getCodigoActividades() == null ? 0 : this 
        .getCodigoActividades().hashCode()); 
     return result; 
    } 

} 

回答

0

感謝大家,我沒有初始化我@Embeddable EventosActividadesId類,並在我的EventosActividades設置實體像這樣:

EventosActividadesId id = new EventosActividadesId(); id.setCodigoActividades(「ACTCBK」); eventosActividades.setId(id);