Duvida com Relacionamento em JPA de Primary Key Composta

Ola Pessoal,

Estou com uma duvida aqui em JPA, tive lendo e vi que para se fazer uma PK composta teriamos de criar uma classe com a anotação @Embedded onde nessa classe teria os campos/propriedades que fazem parte da chave composta

por exemplo:
Classe Unidade Operacional, possui como chaves primarias o idCidade, idUnidadeOperacional,idUnidadeAdministrativa

@Embedded
public class UnidadeOperacionalPK implementes Serializable {
    @Column(name="CDUOR")
    private Integer idUnidadeOperacional;
    @Column(name="CDADMIN")
    private Integer idUnidadeAdministrativa;
    @Column(name="CDCIDADE")
    private Integer idCidade;

    public UnidadeOperacionalPK() {}

    public UnidadeOperacionalPK(Integer idUnidadeOp, Integer idUnidadeAdmin,Integer idCidade {
        this.idUnidadeOperacional = idUnidadeOp;
        // .... o mesmo com os demais
    }

    // gets e sets
}
@Entity
public class UnidadeOperacional implementes Serizalizable {
  @EmbeddedId
  private UnidadeOperacionalPK unidadeOperacionalPK;  

  // demais campos

  // gets e sets
}

Ate ae beleza, ae eu pergunto se UnidadeOperacional se relaciona com a classe Previsao por exemplo, que tem como PK todos os campos de UnidadeOperacional + um campo de Data = dataPrevisao, como eu deveria fazer ?
criaria um PrevisaoPK que iria receber tudo isso, ou colocaria o um UnidadeOperacionalPK + um DataPrevisao com a anotação @Id, isso ´epossivel ? como devo fazer nesses casos ?
E se Previsao recebesse uma outra classe que formaria a sua PK, como deveria ser feito.

@EmbeddedId
UnidadeOperacionalPK unidadeOperacionalPK;
@Id
@Temporal(TemporalType.DATE)
Date dataPrevisao;

Agradeço!

veja se este tópico te ajuda:

http://www.guj.com.br/posts/list/82701.java#440786

Aproveitando o post, estou com um porblema um chame primaria composta.

Meu problema é o seguinte, tenho uma tabela que possui como chave primaria, dois campos, onde um deles é IDENTITY( SQL SERVER).

Criei as classes e tudo mais, inclusive coloquei o @GeneratedValue(strategy = GenerationType.IDENTITY) esta na classe PK.

So que quando vou inserir da um erro, dizendo que o IDENTITY esta off.

@Entity
@Table(name = "hlpd_ListaAtividade")
public class ListaAtividade implements Serializable {
    private static final long serialVersionUID = 1L;
    @EmbeddedId
    protected ListaAtividadePK listaAtividadePK;
    @Column(name = "desc_Atividade", nullable = false)
    private String descAtividade;
    @JoinColumn(name = "cod_TipoTarefa", referencedColumnName = "cod_TipoTarefa", insertable = false, updatable = false)
    @ManyToOne
    private TipoTarefa tipoTarefa;
    ....
}
@Embeddable
public class ListaAtividadePK implements Serializable {
    @Column(name = "cod_TipoTarefa", nullable = false)
    private int codTipoTarefa;
    
    @Column(name = "seq_Atividade", nullable = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int seqAtividade;
    ....
}

Erro:

[TopLink Warning]: 2008.02.26 02:07:20.973--UnitOfWork(27025763)--Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.0 (Build b58g-fcs (09/07/2007))): oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Cannot insert explicit value for identity column in table 'hlpd_ListaAtividade' when IDENTITY_INSERT is set to OFF.
Error Code: 544
Call: INSERT INTO hlpd_ListaAtividade (desc_Atividade, cod_TipoTarefa, seq_Atividade) VALUES (?, ?, ?)
	bind => [sdfdf, 2, 0]
Query: InsertObjectQuery(ListaAtividade[listaAtividadePK=ListaAtividadePK[codTipoTarefa=2, seqAtividade=0]])

Alguem poderia ajudar!!!

Topic update…