2017-06-20 181 views
0

我有这种情况:一个人可以有很多银行账户,但一个银行账户只能属于一个特定的人。显而易见一对多的关系: enter image description herehibernate中的关系映射,一对一还是多对一?

我对BankAccount类模式是这样的:

@Entity 
@Table(name="bank_account") 
public class Bank { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name="bank_id") 
    private int bankId; 

    @Column(name="account_number") 
    private String accNumber; 

    @ManyToOne // or @OneToOne? 
    private Person person; 

问题是,当我看着我的图,我可以清楚地看到OneToMany关系,从而扭转这将意味着很多到一个。但从一边“一个银行账户只能属于一个特定的人”让我觉得有可能是OneToOne需要的关系。哪一个是对的?当考虑模型中映射关系的逻辑时,我应该从图中只反转关系还是查看一个子对象与父表的关系?

回答

0

从某种意义上说,OnetoOne关系是一个ManyTOne关系,除了它包含一个唯一性约束。

在你的情况说:“一个银行账户只能属于一个特定的人”,但如果你把一个OneToOne关系,这意味着,在您的银行帐户表中特定的人外键必须只出现一旦。

这就是为什么OneToMany的反转映射是允许多个FK的ManytoOne,否则它没有意义。

只是一个小窍门:

尝试记住,oneToOne关系可能意味着,有可能你的两个表只是一个因为涉及的关系的对象higly耦合和依赖。

希望很清楚

+0

谢谢!这是非常明确的,内容翔实的答案。我看着模型就好像它是一个对象,我没有意识到我应该把它看作整个表格) – Alyona