[Resolvido] Erro Insert Hibernate

Fala galera,

estou tentando inserir o seguinte objeto:


@Entity
@Table(name="operador")
public class Operador{

	

	 @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name="id_chamado_operador")
	private Long idChamadoOperador;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_chamado", insertable = true, updatable = false, nullable = true)
	private Chamado chamado;
	
	@OneToOne
	@JoinColumn(name = "id_usuario", insertable = true, updatable = false, nullable = true)
	private Usuario usuario;

Só que ele tá dando um conflito muuuuuuito doido :shock:

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (sgs.operador, CONSTRAINT FKE229EC9497EB28FE FOREIGN KEY (id_chamado_operador) REFERENCES chamado (id_chamado))

Esse é o objeto chamado q ele ta dando zica:

public class Chamado implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Id
    @GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name="id_chamado")
	private Long idChamado;
	
	@Column(name="dt_chamado")
	private Date dtChamado;
	
	@Column(name="titulo")
	private String titulo;
	
	@Column(name="descricao")
	private String descricao;
	
	@Column(name="situacao")
	private char situacao;
	
	@OneToOne
	@JoinColumn(name = "id_problema")
	private Problema problema;
	
	@ManyToOne(fetch = FetchType.LAZY) 
	@JoinColumn(name = "id_chamado_pai", insertable = true, updatable = true, nullable = true) 
	private Chamado chamadoPai;
	
	@OneToOne(fetch = FetchType.LAZY) 
	@JoinColumn(name = "id_solicitante")
	private Usuario usuarioCriacao;
	
	@OneToMany(fetch = FetchType.LAZY) 
	@JoinColumn(name = "id_chamado_operador")
	private List<Operador> operadores;

Alguem, pela madrugada, já viu esse erro?

Vi aqui q o Hibernate foi la e criou uma constraint na tabela operador chamada id_chamado_operador referenciando a coluna id_chamado na tabela chamado…vixi to confuso

Você está tentando inserir um objeto operador, sem falar pra ele, qual o chamado que ele pertence.
Você colocou como@ManyToOne o Chamado.

Dessa forma, todo operador tem que ter um chamado.

Acontece muitas vezes de você está referenciando incorretamente o objeto operador.

Caso não resolva, poste o método que está incluindo.

Abraço.

Uma pergunta, seu Primary Key da tabela OPERADOR é o mesmo Foreign Key da tabela CHAMADO ?

[quote=101574]Você está tentando inserir um objeto operador, sem falar pra ele, qual o chamado que ele pertence.
Você colocou como@ManyToOne o Chamado.

Dessa forma, todo operador tem que ter um chamado.

Acontece muitas vezes de você está referenciando incorretamente o objeto operador.

Caso não resolva, poste o método que está incluindo.

Abraço.[/quote]

Antes de salvar o objeto operador eu vou e passo pra ele o objeto chamado

  
Operador op = new Operador();

op.setChamado(chamado);

E já verifiquei se o objeto estava nulo e nao esta…

A zica está acontecendo pq o Hibernate está criando uma CONSTRAINT chamada id_chamado_operador ( PK da tabela Operador ) referenciando id_chamado (PK da tabela Chamado). Loko isso…

Não tem FK de Operador em Chamado, pois um Chamado tem vários Operadores.

[quote=JackOld]Fala galera,

estou tentando inserir o seguinte objeto:


@Entity
@Table(name="operador")
public class Operador{

	

	 @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name="id_chamado_operador")
	private Long idChamadoOperador;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_chamado", insertable = true, updatable = false, nullable = true)
	private Chamado chamado;
	
	@OneToOne
	@JoinColumn(name = "id_usuario", insertable = true, updatable = false, nullable = true)
	private Usuario usuario;

Só que ele tá dando um conflito muuuuuuito doido :shock:

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (sgs.operador, CONSTRAINT FKE229EC9497EB28FE FOREIGN KEY (id_chamado_operador) REFERENCES chamado (id_chamado))

Esse é o objeto chamado q ele ta dando zica:

public class Chamado implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Id
    @GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name="id_chamado")
	private Long idChamado;
	
	@Column(name="dt_chamado")
	private Date dtChamado;
	
	@Column(name="titulo")
	private String titulo;
	
	@Column(name="descricao")
	private String descricao;
	
	@Column(name="situacao")
	private char situacao;
	
	@OneToOne
	@JoinColumn(name = "id_problema")
	private Problema problema;
	
	@ManyToOne(fetch = FetchType.LAZY) 
	@JoinColumn(name = "id_chamado_pai", insertable = true, updatable = true, nullable = true) 
	private Chamado chamadoPai;
	
	@OneToOne(fetch = FetchType.LAZY) 
	@JoinColumn(name = "id_solicitante")
	private Usuario usuarioCriacao;
	
	@OneToMany(fetch = FetchType.LAZY) 
	@JoinColumn(name = "id_chamado_operador")
	private List<Operador> operadores;

Alguem, pela madrugada, já viu esse erro?
[/quote]

Resolvi colocando tirando o JoinColumn de operadores na classe Chamado e colocando o mappedby = chamado nesse relacionamento OneToMany