2016-12-24 4 views
1

У меня есть два объекта: Пользователь и Гость, который содержит (ссылки) пользователя. Пользователь:Hibernate: ключ 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; 
    ...  
} 

Но вы должны смотреть на реализацию inheritance

+0

Я был в состоянии решить мою проблему путем внедрения наследование, как вы предложили. Я искал решение в неправильном месте, даже не думая о наследовании. –

+0

Большое вам спасибо, вы просто спасли мне несколько часов работы. –

0

упоминать имя столбца в @JoinColumn не иностранный ключевое ограничение.

@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; 
    } 
} 
Смежные вопросы