Dentro de uma chave composta uma chave estranjeira?

0 respostas
V

boa noite
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
@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

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

Ponto.class
@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
PontoPK.class
@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

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.

obs.: talvez alguem já tenha vista esse mesmo topic em outros foruns,
é q preciso de uma ajuda urgente e não consigo axar resposta pra esse probelma

aguardo alguma ajuda
grato

Criado 29 de junho de 2007
Respostas 0
Participantes 1