package entity;

import java.util.Date;
import javax.persistence.*;

@Entity
@Table(name = "UserVotes")
public class UserVotes {

    @EmbeddedId
    private UserVotesId id;

    @ManyToOne(optional = false)
    @JoinColumn(name = "user_id", referencedColumnName = "user_id", 
                foreignKey = @ForeignKey(name = "fk_user_votes_user"))
    private User user;

    @ManyToOne(optional = false)
    @JoinColumn(name = "beg_id", referencedColumnName = "beg_id", 
                foreignKey = @ForeignKey(name = "fk_user_votes_beg"))
    private BegInfo begInfo;

    @ManyToOne(optional = false)
    @JoinColumn(name = "seed_id", referencedColumnName = "seed_id", 
                foreignKey = @ForeignKey(name = "fk_user_votes_seed"))
    private Seed seed;

    @Column(name = "created_at", nullable = false)
    @Temporal(TemporalType.TIMESTAMP)
    private Date createdAt;

    public UserVotes() {}

    // getter and setter for the composite key and other fields
    public UserVotesId getId() {
        return id;
    }

    public void setId(UserVotesId id) {
        this.id = id;
    }

    // getters and setters for user, begInfo, seed, createdAt
}
