JackOld
Dezembro 14, 2012, 12:32am
#1
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?
JackOld
Dezembro 14, 2012, 12:49am
#2
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
101574
Dezembro 14, 2012, 8:32am
#3
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 ?
JackOld
Dezembro 14, 2012, 9:45am
#5
[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…
JackOld
Dezembro 14, 2012, 9:46am
#6
Não tem FK de Operador em Chamado, pois um Chamado tem vários Operadores.
JackOld
Dezembro 14, 2012, 10:56am
#7
[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