@EmbeddedId抛出IdIdentifierGenerationException:即使使用@GeneratedValue(strategy = GenerationType.AUTO)也会生成null id

时间:2014-11-07 00:43:56

标签: mysql hibernate jpa

您好我的关系抛出@EmbeddedId会抛出IdIdentifierGenerationException:null id。欢迎任何建议。这是我的代码:

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

}

1 个答案:

答案 0 :(得分:0)

感谢所有人,我没有初始化我的@Embeddable EventosActividadesId类,并以这种方式设置在我的EventosActividades实体中:

  

EventosActividadesId id = new EventosActividadesId();   id.setCodigoActividades(&#34; ACTCBK&#34);   eventosActividades.setId(ID);