Relacionamento Chave PK

2 respostas
Juliano_Pedroso_da_S

Olá, tenho uma classe "Filial" que hoje tem uma chave Primária, ou seja não pode existir na mesma tabela um ID com o mesmo Valor.

Mas surgiu um empasse na aplicação que vou ter que dar um jeito para que aceite na coluna ID o mesmo Valor.

/**
 * Arquivo   : Filial.java
 *
 * @hibernate.class table="FILIAL"
 */
public class Filial
{
    private int id;
    private String name;
    private Company company;
    
    /**
     * Construtor padrão: inicializa os objetos.
     */
    public Filial()
    {
        this.company = new Company();
    }
    
    /**
     * Retorna o id
     *
     * @return id
     *
     * @hibernate.id column="CD_FILIAL" generator-class="assigned" type="int"
     */
    public int getId()
    {
        return this.id;
    }
    
    /**
     * Seta o id
     *
     * @param id
     */
    public void setId(int id)
    {
        this.id = id;
    }
    
    /**
     * Retorna o nome
     *
     * @return nome
     *
     * @hibernate.property column="NM_FILIAL"
     */
    public String getName()
    {
        return this.name;
    }
    
    /**
     * Seta o nome
     *
     * @param nome
     */
    public void setName(String name)
    {
        this.name = name;
    }

 /**
     * Retorna a empresa
     *
     * @return empresa
     *
     * @hibernate.many-to-one name="company" class="business.Company" column="CD_EMPRESA"
     */
    public Company getCompany()
    {
        return this.company;
    }
    
    /**
     * Seta a empresa
     *
     * @param empresa
     */
    public void setCompany(Company company)
    {
        this.company = company;
    }
}

Minha ideía é utilizar uma chave composta com o CD_FILIAL, CD_EMPRESA.

Mas nunca precisei efetuar esse tipo de alteração no Hibernate, como eu crio essa Chave composta.?
Sei que posso criar outra tabela para isso onde posso guardar somente o CD_FILIAL, CD_EMPRESA, mas primeiro queria entender como que funciona a chave composta
no Hibernate, pois acho que poderei usar nesse caso.

Um problema é quando o id da filial se repete e dou um getFilial em chamando apartir de outra classe que se relaciona com a filial somente pelo ID da Filial eu recebo na log a mensagem de EXCEPTION, que existe mais de um registro e não pode ser exibido. Mas acredito se colocar essa chave composta posso resolver isso. também não sei ao certo se vou ter que alterar a chamada dos "gets" onde retorno a Filial....

2 Respostas

v1c70r_f

Carinha, com JPA acho que vai precisar de algo parecido com isso:

public class Filial {

	@EmbeddedId
	@AttributeOverrides({
		@AttributeOverride(name = "codigoFilial", column =
		@Column(name = "COD_FILIAL", nullable = false)),
		@AttributeOverride(name = "codigoEmpresa", column =
		@Column(name = "COD_EMPRESA", nullable = false))})
	private FilialId id;

	// get e set
}


@Embeddable
public class FilialId implements java.io.Serializable {

	@Column(name = "COD_FILIAL", nullable = false)
	private Long codigoFilial;

	@Column(name = "COD_EMPRESA", nullable = false)
	private Long codigoEmpresa;


	// get e set
}

Qualquer coisa dá uma olhadinha em http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/entity.html, na seção “2.2.3.2. Composite identifier”.

Agora, olhando no seu código, vc está utilizando xdoclet?

Se sim, dá uma olhadinha aqui ou então aqui no guj mesmo, só procurar por composite-id e xdoclet que tem vários posts

o/

Juliano_Pedroso_da_S

Valeu pela ajuda, vou dar uma olhada, obrigado…

Criado 8 de dezembro de 2010
Ultima resposta 10 de dez. de 2010
Respostas 2
Participantes 2