2016-12-24 157 views
1

我有两个实体:一个用户和一个包含(引用)用户的访客。 用户:休眠:Forign键需要是主键

@Entity 
public class User { 

    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE) 
    private long user_id; 

    @Column(unique = true) 
    private String email; 
    @Column 
    private String password; 
    @Column 
    private String name; 
    @Column 
    private String surname; 
    .... 
} 

游客:

@Entity 
public class Guest { 
    @Id 
    @OneToOne 
    @JoinColumn(name = "user_id_fk") 
    private User user; 

    private int visits; 
    ...  
} 

正如您可以猜到,我想我的外键USER_ID(user_id_fk)是我的客人的主键,但是这个代码似乎不工作。 任何帮助将不胜感激。

回答

1

@PrimaryKeyJoinColumn可能工作(我不知道)

您的客房等级:

@Entity 
public class Guest { 
    @OneToOne 
    @PrimaryKeyJoinColumn 
    private User user; 

    private int visits; 
    ...  
} 

但你应该寻找在@JoinColumn实施inheritance

+0

我能够通过实施解决我的问题按照你的建议继承。我一直在错误的地方寻找解决方案,甚至没有考虑继承问题。 –

+0

非常感谢,您只是为我节省了几个小时的工作时间。 –

0

提及列名不对外关键约束名称。

@OneToOne 
@JoinColumn(name = "user_id") 
private User user; 
0

感谢Y. Tarion,我解决了我的问题。

对于任何人谁可能会有所帮助,我在这里发布我的代码:

用户:

@Entity 
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) 
public class User { 

    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE) 
    private long user_id; 

    @Column(unique = true) 
    private String email; 
    @Column 
    private String password; 
    @Column 
    private String name; 
    @Column 
    private String surname; 
    //...constructors, getters and setters... 
} 

游客:

@Entity 
public class Guest extends User { 

    private int visits; 

    @ManyToMany 
    private List<Guest> friends; 

    public int getVisits() { 
     return visits; 
    } 

    public void setVisits(int visits) { 
     this.visits = visits; 
    } 

    public List<Guest> getFriends() { 
     return friends; 
    } 

    public void setFriends(List<Guest> friends) { 
     this.friends = friends; 
    } 
}