Dentro de uma chave composta uma chave estranjeira? é possi

bom dia…
blz ae com vcs? espero q sim

estou desenvolvendo um sistema de ponto eletronico, e estou com problema
em fazer o mapeamento das entitade.

tenho duas entidades.

Pessoa e Ponto

Pessoa.class

[code]@Entity
public class Pessoa implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(nullable=false)
private Long id;

@OneToMany(cascade=CascadeType.ALL,mappedBy = "pessoa")
private List<Ponto> pontos;

@OneToOne(cascade=CascadeType.ALL,mappedBy = "pessoa")
private Horario horario;

@Column(unique=true)
private String cpf;

@OneToOne(cascade=CascadeType.ALL,mappedBy="pessoa")
private Digital digital;

private String nome;
private String email;

@ManyToOne
private Departamento Departamento;

/** Creates a new instance of Pessoa */
public Pessoa() {
}

// gets ,sets , hashcode e equal omitidos
[/code]

A minha classe ponto, eu gostaria q tive os campos Pessoa, DatadoPonto e Turno como chaves, por isso criei uma chave composta.

Ponto.class

[code]
@Entity
public class Ponto implements Serializable {

@EmbeddedId
private PontoPK id;

private String justEntrada;
private String justSaida;

@Temporal(value = TemporalType.TIME)
private Date horaEntrada;
@Temporal(value = TemporalType.TIME)
private Date horaSaida;

@Temporal(value = TemporalType.TIME)
private Date totalHorasTrabalhas;

// gets ,sets , hashcode e equal omitidos
[/code]

PontoPK.class

[code]
@Embeddable
public class PontoPK implements java.io.Serializable {

@ManyToOne
@JoinColumn(nullable=false)
private Pessoa pessoa;
@Column(nullable=false)
private String turno;
@Temporal(value = TemporalType.DATE)
@Column(nullable=false)
private Date dataPonto;

/** Creates a new instance of PontoPK */
public PontoPK(Pessoa pessoa,Date dataPonto,String turno ) {
    this.setPessoa(pessoa);
    this.setDataPonto(dataPonto);
    this.setTurno(turno);
    
}
protected PontoPK() {
}

// gets ,sets , hashcode e equal omitidos[/code]

meu problema eh msm eu colocando a Pessoa como chave , qdo olho direto no banco, esse campo nao eh criado como chave. E por isso nao consigo inserir duas pessoas diferentes no msm dia e mesmo turno.

aguardo alguma ajuda
grato

OPa… esse dias atras eu postei sobre essa mesma dúvida… da uma olhada no fórum que tu vai achar :joia:

valeu ae cara.
axei esse topic aki q vc postou

http://www.portaljava.com/home/modules.php?name=Forums&file=viewtopic&t=39534&highlight=

mas nao intendi o q vc kis mostrar. axo q não é bem meu caso.

teria como vc da uma explicada ae por favor, como posso resolver esse problema.

abraço

La no post, eu mostrei como mapear uma chave estrangeira, acho q é isso que tu esta querendo ne ? ou entendi errado ? :roll:

é mais ou menos isso, eh tenho uma chave composta, e uma dessas chaves é estranjeira,
vo ler novamente o post aki, mas se tive alguma coisa pra ajudar posta ae.
valeu

cara…vc esta colocando o seu Bean Pessoa como parte da PK, e nao o id da Pessoa…

de qq forma, da uma revisada no seu modelo de banco (se for possivel)…pq essa sua PK composta por uma FK, uma Data e uma String, esta bem estranho…

não seria mais interessante vc criar essa tabela Ponto, com a FK Pessoa fora da chave, com uma PK numerica auto-incremente, e pra vc ganhar em perfomance, vc criar Indices com os campos q vc precisa, e depois implementar seus metodos de forma bem mais simples?

espero ter ajudado…

blz ae cara, ajudou sim,
vo tentar fazer desse jeito que me disse,
ae volto ae postar aki

valeu