2
respostas

Relacionamento One to Many

Salve galera, dúvida é a seguinte: Tenho duas tabelas

CREATE TABLE IF NOT EXISTS `tb_ppm_uo` (
`uo_codigo` int(11) NOT NULL,
  `uo_descricao` varchar(255) CHARACTER SET latin1 DEFAULT NULL
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `tb_ppm_ud` (
  `ud_codigo` int(11) NOT NULL,
  `ud_descricao` varchar(250) DEFAULT NULL,
  `uo_codigo_fk` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Não estão aparecendo os relacionamentos porque eu exportei mas na tabela tb_ppm_ud como se pode ver pelo nome do campo temos uma pk de tb_ppm_uo e a chave primaria de tb_ppm_ud é composta por ud_codigo e uo_codigo_fk até aí sem problemas, mas quando vou fazer o oneToMany ela quer os dois campos(de certa forma eu até entendo afinal a pk é composta) , como eu faço isso corretamente?

//Representação da tabela de Uo
@Entity
@Table(name = "tb_ppm_uo")
public class UnidadeOrcamentaria implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "uo_codigo")
    private Integer uoCodigo;

    @Column(name = "uo_descricao")
    private String uoDescricao;

    @OneToMany
    private List<UnidadeDespesa> unidadesDespesa;


}
//Representação da tabela de Ud
@Entity
@Table(name = "tb_ppm_ud")
public class UnidadeDespesa implements Serializable {

    private static final long serialVersionUID = 1L;

    @EmbeddedId
    private UnidadeDespesaId id;

    @Column(name = "ud_descricao")
    private String udDescricao;

//Representação da tabela de chave da Ud

@Embeddable
public class UnidadeDespesaId implements Serializable {

    private static final long serialVersionUID = 1L;

    @Column(name = "ud_codigo")
    protected Integer udCodigo;
    @Column(name = "uo_codigo_fk")
    protected UnidadeOrcamentaria uoCodigoFk;
}
2 respostas

Acho que eu posso estar me passando aqui, esse jeito que você fez não é suficiente? Qual o erro que ele acusa?

Alberto primeiro ele estava com problemas nos nomes, depois eu fiz essa alteração.

@OneToMany
    @JoinTable(name = "tb_ppm_uo", 
    inverseJoinColumns = {
            @JoinColumn(name = "ud_codigo",referencedColumnName="ud_codigo"), 
            @JoinColumn(name = "uo_codigo",referencedColumnName="uo_codigo_fk") 
            })
    private List<UnidadeDespesa> unidadesDespesa;

O problema(acho que é design) é que por a pk da tabela tb_ppm_ud ser composta se eu deixar só o uo_codigo_fk ele reclama e se eu deixar como está acima ele procura o campo ud_codigo na tabela pai que é tb_ppm_uo