JoinColumns Hibernate colunas diferentes

1 resposta
sunwebdeveloper
Olpa Pessoal, andei pesquisando no forum e não encontrei nada exatamente como com o que estou enfrentando. Preciso fazer o seguinte mapeamento: Possuo os beans : PedaBean(Pedidos):
@Entity
@Table(name="ID_CDTB_PED_AMOSTRAS_PEDA")
public class PedaBean implements Serializable {
	private static final long serialVersionUID = 1L;
	
	 @EmbeddedId
     private PedaID pedaID;
	 @Column(name="PEDA_NR_TUBOS", nullable=true)
	 private Integer nr_tubos;
	 @Column(name="PEDA_NR_EXAMES", nullable=true)
	 private Integer nr_exames;
	 @Column(name="PEDA_CD_IDENTIF", nullable=true, length=15)
	 private String cd_identif;
	 @Column(name="PEDA_NO_NOME", nullable=true, length=45)
	 private String no_nome;
	 @Column(name="PEDA_DS_IDADE", nullable=true, length=7)
	 private String ds_idade;
	 @Column(name="PEDA_CD_SEXO", nullable=true, length=1)
	 private char cd_sexo;
	 @Column(name="PEDA_DS_DUM", nullable=true, length=10)
	 private String ds_dum;
	 @Column(name="PEDA_DS_SGES", nullable=true)
	 private Double ds_sges;
	 @Column(name="PEDA_NO_MEDICO", nullable=true, length=60)
	 private String no_medico;
	 @Column(name="PEDA_DS_OBSERVACAO", nullable=true, length=60)
	 private String ds_observacao;
	 @Column(name="PEDA_IN_SIPEX", nullable=true, length=1)
	 private Character in_sipex;
	 @Column(name="PEDA_NO_USUARIO", nullable=true, length=10)
	 private String no_usuario;
	 @OneToMany(mappedBy="pedaBean", cascade=CascadeType.ALL) 
	 private List<DtexBean> exames;
                getters and setters...
Com o pk (PedaID):
@Embeddable
public class PedaID implements Serializable {
	
	private static final long serialVersionUID = 1L;
	
	@Column(name="PEDA_ID_CLIENTE", nullable=false)
	private int id_cliente;
	@Column(name="PEDA_DH_PEDIDO", nullable=false)
	private Date dh_pedido;
	@Column(name="PEDA_NR_PEDIDO", nullable=false)
	private int nr_pedido;
                getters and setters...

E itens do Pedido(Exames no caso):

@Entity
@Table(name="ID_CDTB_DETALHE_EXAMES_DTEX")
public class DtexBean implements Serializable {
	
	private static final long serialVersionUID = 1L;
	
	@EmbeddedId
    private DtexID dtexID;
	@Column(name="DTEX_NR_QUANTIDADE", nullable=true)
	private Integer nr_quantidade;
	@Column(name="DTEX_DH_COLETA", nullable=true)
	private Date dh_coleta;
	@Column(name="DTEX_DS_OBSERVACAO", nullable=true, length=50)
	private String ds_observacao;
	@Column(name="DTEX_CD_BARRAS", nullable=true, length=12)
	private String cd_barras;
	@Column(name="DTEX_CD_BARRASCLIENTE", nullable=true, length=15)
	private String cd_barrascliente;
	@ManyToOne
	private PedaBean pedaBean;
                getters and setters...
com a PK:
@Embeddable
public class DtexID implements Serializable {

	private static final long serialVersionUID = 1L;
	
	@Column(name="DTEX_ID_CLIENTE", nullable=false)
	private Integer id_cliente;
	@Column(name="DTEX_DH_PEDIDO", nullable=false)
	private Date dh_pedido;
	@Column(name="DTEX_NR_PEDIDO", nullable=false)
	private Integer nr_pedido;
	@Column(name="DTEX_CD_EXAME", nullable=false)
	private Integer cd_exame;
                getters and setters...

Minha dúvida é: como fazer o Join em DtexBean se as colunas das duas tabelas são diferentes ??? Elas não possuem um nome em comum como por exemplo ID_CLIENTE, DH_PEDIDO e NR_PEDIDO. Essa base de dados já existe e esta em operação, INFELIZMENTE NÂO POSSO MUDA-LA, em minha base de teste renomeei as colunas e minhas anotações e deu certo, mas não irei poder faze-lo.
Obrigado.

1 Resposta

Lavieri

prefira IdClass em favor de EmbedableId , elas são sempre mais claras … veja um exemplo de troca de EmbeddableId por IdClass nessa outra thread http://guj.com.br/posts/list/141017.java

Banco legado é um saco =/

o nome no banco é ideferente, o mapeamente objeto relacional é feito pelos nomes das propriedades do objeto, que vc pode sim tornalos a ficar igual, mas isso não é obrigatorio, é possivel fazer joins sem essa abordagem…

com o IdClass, as propriedades vão sair de dentro da chave composta e virão para a classe, e ficará mais facil de vc fazer as ligações

Criado 10 de outubro de 2009
Ultima resposta 13 de out. de 2009
Respostas 1
Participantes 2