Ola Pessoal,
Estou tentando inserir um registro filho porem da erro, alguem tem alguma ideia do que pode ser ?
Entidade Pai:
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "cod_contrato")
private Long codContrato;
@Column(name = "des_contrato")
private String desContrato;
@Column(name = "obs")
private String obs;
@Type(type = "statusEnumType")
@Column(name = "des_status")
private StatusEnum desStatus;
@Type(type = "simNaoEnumType")
@Column(name = "finalizado")
private SimNaoEnum finalizado;
@JoinColumn(name = "tp_contrato", referencedColumnName = "cod_tipo_contrato")
@ManyToOne
private TiposContratos tpContrato;
@JoinColumn(name = "cod_contato", referencedColumnName = "cod_contato")
@ManyToOne
private Contatos contato;
@JoinColumn(name = "cod_grupo", referencedColumnName = "cod_grupo")
@ManyToOne
private Grupos grupo;
@JoinColumn(name = "cod_pessoa", referencedColumnName = "cod_pessoa")
@ManyToOne
private Pessoa pessoa;
@OneToMany(mappedBy = "contratos")
private List<ContratosEspaco> contratosEspacoList; >>>> AQUI ESTA ESTA DANDO ERRO
Entidade Filho:
@Id
@Column(name = "cod_contrato")
private Long codContrato;
@Id
@Column(name = "cod_espaco")
private Long codEspaco;
@Type(type = "statusEnumType")
@Column(name = "des_status")
private StatusEnum desStatus;
@JoinColumn(name = "cod_contrato", referencedColumnName = "cod_contrato")
@ManyToOne
private Contratos contratos;
@JoinColumn(name = "cod_espaco", referencedColumnName = "cod_espaco")
@ManyToOne
private Espacos espaco;
Inserindo apenas a entidade Pai consigo na boa.
Se eu tento inserir a entidade filha inserindo uma lista no pai e persistindo o pai assim:
Codigo:
if (listaEspacoSelecionados.size() > 0){
List<ContratosEspaco> lista = new ArrayList<ContratosEspaco>();
for (Espacos obj : listaEspacoSelecionados){
ContratosEspaco es = new ContratosEspaco();
es.setCodContrato(contrato.getCodContrato());
es.setCodEspaco(obj.getCodEspaco());
es.setDesStatus(StatusEnum.ATIVO);
lista.add(es);
}
getContrato().setContratosEspacoList(lista);
}
if (getContrato().getCodContrato() != null) {
em.merge(getContrato());
} else {
em.persist(getContrato());
}
Da o seguinte erro, conseguindo achar a entidade filha:
11:49:09,075 ERROR [STDERR] javax.persistence.EntityNotFoundException: Unable to find br.com.xyz.entity.ContratosEspaco with id br.com.xyz.entity.ContratosEspacoPK[codContrato=8, codEspaco=1]
11:49:09,075 ERROR [STDERR] at org.hibernate.ejb.Ejb3Configuration$Ejb3EntityNotFoundDelegate.handleEntityNotFound(Ejb3Configuration.java:113)
Ao tentar inserir a entidade Pai primeiro e depois a filha da o seguinte erro:
if (getContrato().getCodContrato() != null) {
em.merge(getContrato());
} else {
em.persist(getContrato());
}
if (listaEspacoSelecionados.size() > 0){
for (Espacos obj : listaEspacoSelecionados){
ContratosEspaco es = new ContratosEspaco();
es.setCodContrato(contrato.getCodContrato());
es.setCodEspaco(obj.getCodEspaco());
es.setDesStatus(StatusEnum.ATIVO);
em.persist(es);
}
}
11:40:57,129 INFO [STDOUT] Hibernate:
insert
into
contratos_espaco
(cod_contrato, des_status, cod_espaco)
values
(?, ?, ?)
11:40:57,129 INFO [LongType] could not bind value '8' to parameter: 4; O índice 4 está fora do intervalo.
11:40:57,161 WARN [JDBCExceptionReporter] SQL Error: 0, SQLState: S1093
11:40:57,161 ERROR [JDBCExceptionReporter] O índice 4 está fora do intervalo.
11:40:57,161 ERROR [AbstractFlushingEventListener] Could not synchronize database state with session
org.hibernate.exception.GenericJDBCException: could not insert: [br.com.xyz.entity.ContratosEspaco]
Alguem tem alguma ideia do que pode ser ?
Estou tuilizando Seam 2.2.1 + RichFaces 3.3.2 + Jboss 5.1.0 + SQL 2005
Obrigado,
Rodrigo