Tenho duas classes: Ocorrencias e Hst_Ocorrencias(historico das ocorrencias).
O relacionamento é pai e filho, ou seja, cada ocorrencia tem vários historicos (1:N) só que a chave da ocorrencia é oco_numero e a chave do historico é hst_oco_numero + hst_oco_data. Quando mando o hibernate gerar as tabelas ele esta gerando a chave do historico só o hst_oco_numero. Eis o codigo das 2 classes
classe ocorrencia
package br.com.europa.modelo;
import java.sql.Date;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
@Entity
public class Ocorrencia {
/*
* membros
*/
@Id @GeneratedValue
private Long oco_numero;
@Column(nullable=false)
private Date oco_data;
@Column(length=20, nullable=false)
private String oco_abertopor;
@ManyToOne
@JoinColumn(name="oco_cliente", nullable=false)
private Cliente cliente;
@ManyToOne
@JoinColumn(name="oco_tp_ocorrencia", nullable=false)
private TipoOcorrencia tipoOcorrencia;
@ManyToOne
@JoinColumn(name="oco_distribuidor", nullable=false)
private Distribuidor distribuidor;
@Column(columnDefinition="LONGTEXT")
private String oco_obs_abertura;
private Date oco_dtconclusao;
@Column(length=20)
private String oco_concluinte;
@Column(columnDefinition="LONGTEXT")
private String oco_obs_conclusao;
@OneToMany(mappedBy="ocorrencia")
private Set<Hst_Ocorrencia> hst_Ocorrencia;
/*
* construtores
*/
public Ocorrencia(){
}
/*
* metodos
*/
public Cliente getCliente() {
return cliente;
}
public void setCliente(Cliente cliente) {
this.cliente = cliente;
}
public Distribuidor getDistribuidor() {
return distribuidor;
}
public void setDistribuidor(Distribuidor distribuidor) {
this.distribuidor = distribuidor;
}
public String getOco_abertopor() {
return oco_abertopor;
}
public void setOco_abertopor(String oco_abertopor) {
this.oco_abertopor = oco_abertopor;
}
public String getOco_concluinte() {
return oco_concluinte;
}
public void setOco_concluinte(String oco_concluinte) {
this.oco_concluinte = oco_concluinte;
}
public Date getOco_data() {
return oco_data;
}
public void setOco_data(Date oco_data) {
this.oco_data = oco_data;
}
public Date getOco_dtconclusao() {
return oco_dtconclusao;
}
public void setOco_dtconclusao(Date oco_dtconclusao) {
this.oco_dtconclusao = oco_dtconclusao;
}
public Long getOco_numero() {
return oco_numero;
}
public void setOco_numero(Long oco_numero) {
this.oco_numero = oco_numero;
}
public String getOco_obs_abertura() {
return oco_obs_abertura;
}
public void setOco_obs_abertura(String oco_obs_abertura) {
this.oco_obs_abertura = oco_obs_abertura;
}
public String getOco_obs_conclusao() {
return oco_obs_conclusao;
}
public void setOco_obs_conclusao(String oco_obs_conclusao) {
this.oco_obs_conclusao = oco_obs_conclusao;
}
public TipoOcorrencia getTipoOcorrencia() {
return tipoOcorrencia;
}
public void setTipoOcorrencia(TipoOcorrencia tipoOcorrencia) {
this.tipoOcorrencia = tipoOcorrencia;
}
public Set<Hst_Ocorrencia> getHst_Ocorrencia() {
return hst_Ocorrencia;
}
public void setHst_Ocorrencia(Set<Hst_Ocorrencia> hst_Ocorrencia) {
this.hst_Ocorrencia = hst_Ocorrencia;
}
}
classe Hst_Ocorrencia
package br.com.europa.modelo;
import java.sql.Timestamp;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
@Entity
public class Hst_Ocorrencia {
/*
* membros
*/
@Id
private Timestamp hst_oco_data;
@ManyToOne
@JoinColumn(name="hst_oco_numero", nullable=false)
private Ocorrencia ocorrencia;
@Column(length=20)
private String hst_oco_abertopor;
@Column(columnDefinition="LONGTEXT")
private String hst_oco_obs;
/*
* construtores
*/
public Hst_Ocorrencia(){
}
/*
* metodos
*/
public String getHst_oco_abertopor() {
return hst_oco_abertopor;
}
public void setHst_oco_abertopor(String hst_oco_abertopor) {
this.hst_oco_abertopor = hst_oco_abertopor;
}
public Timestamp getHst_oco_data() {
return hst_oco_data;
}
public void setHst_oco_data(Timestamp hst_oco_data) {
this.hst_oco_data = hst_oco_data;
}
public String getHst_oco_obs() {
return hst_oco_obs;
}
public void setHst_oco_obs(String hst_oco_obs) {
this.hst_oco_obs = hst_oco_obs;
}
public Ocorrencia getOcorrencia() {
return ocorrencia;
}
public void setOcorrencia(Ocorrencia ocorrencia) {
this.ocorrencia = ocorrencia;
}
}
O que está faltando no mapeamento para que a tabela no banco seja criada com a chave composta de hst_oco_numero + hst_oco_data
Grato