Composite Id + ManyToOne

0 respostas
M

Boa noite senhores,
estou procurando a algum tempo e não achei nada. :cry:

Tenho uma classe que possui uma chave composta e um relacionamento dessa classe com outra (Many To One).

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "TABLE_A")
public abstract class ClasseA {
    @EmbeddedId
    private ClasseAKey key;

    ...

    @Embeddable
	public static class ClasseAKey implements Serializable {

	    private static final long serialVersionUID = 1L;

            @Column(name = "COLUMN_A")
	    private String colunaA;
		
	    @ManyToOne
	    @JoinColumn(name = "COLUMN_B")
	    private ObjB objB;

            //...

    }
}

Essa seria uma das classes que implementa A

@Entity
@PrimaryKeyJoinColumns({@PrimaryKeyJoinColumn(name = "COLUMN_A", referencedColumnName="COLUMN_A"), @PrimaryKeyJoinColumn(name="COLUMN_B", referencedColumnName="COLUMN_B")})
@Table(name = "TABLE_A1")
public class SubClasseA extends ClasseA implements Serializable {

...

}

Se eu fizer um HQL buscando tudo que está cadastrado na tabela A funciona perfeitamente e inclusive traz as outras subclasses.
Mas o problema é que possuo um relacionamento da seguinte forma:

@Entity
@Table(name = "TABLE_B")
public class ClasseB implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, 
            generator = "SEQUENCE")
    @SequenceGenerator(name = "SEQUENCE", 
            sequenceName = "SEQUENCE", 
            allocationSize = SEQUENCE)
    @Column(name = "COLUMN_C")
    private long id;
      
    @ManyToOne
    @JoinColumns({@JoinColumn(name="COLUMN_A", referencedColumnName="COLUMN_A"), @JoinColumn(name="COLUMN_B", referencedColumnName="COLUMN_B")})
    private ClasseA classeA;

    ...

}

Alguém sabe se está certo essa forma de relacionar a classeB com a classe A?
Seria através do JoinColumns mesmo? Ou tem algum outro esquema?

Se esse relacionamento não fosse uma chave composta, funcionaria perfeitamente.

Obrigado pela ajuda.

Abraços

Criado 16 de janeiro de 2010
Respostas 0
Participantes 1