package entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.ForeignKey;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;

@Entity
@Table(name = "UserFavorite")
@IdClass(UserStarId.class)  
public class UserStar {
    @Id
    @Column(name = "user_id", length = 36, nullable = false)
    public String userid;  

    @Id
    @Column(name = "seed_id", length = 64, nullable = false)
    public String seedid;

    @OneToOne(optional = false)
    @JoinColumn(
        name = "user_id",
        referencedColumnName = "user_id",
        foreignKey = @ForeignKey(name = "fk_user_id"),
        insertable = false, updatable = false
    )
    public User user;

    @OneToOne(optional = false)
    @JoinColumn(
        name = "seed_id",
        referencedColumnName = "seed_id",
        foreignKey = @ForeignKey(name = "fk_seed_id"),
        insertable = false, updatable = false
    )
    public Seed seed;

    public UserStar() {}  
}