如何在JPA / Hibernate中概念化@OneToMany映射

时间:2019-10-11 13:31:20

标签: hibernate jpa hibernate-onetomany

我刚刚开始学习JPA和Hibernate,我对了解使用Hibernate在JPA中读取/概念化@OneToMany映射的正确方法感到困惑。

例如,假设一个帐户可以有很多交易,但是一个交易只能链接到一个帐户。

因此,我将这种观点理解为“帐户类/实体”,因为“一个帐户可以进行很多交易,因此我应该将“交易”字段标记为@OneToMany。

从另一角度看待“交易类/实体”,我认为就像“一个交易只能链接到一个帐户,因此我应该在交易实体中将帐户字段标记为@OneToOne”

但是,从我观看的几乎所有视频教程和Web资源中都提到,交易实体的“帐户”字段应为@ManyToOne,因为“许多交易可以与一个帐户链接”,这是正确的,但对我来说,这是相同的关系帐户实体中提到的内容以不同的方式解释,但没有说明关系的另一面“一个交易只能链接到一个帐户”

请帮助我理解如何阅读以及如何操作,为什么当一个实体为@OneToMany时另一侧的关系为何。

@Entity
public class Account {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long accountId;

    @OneToMany(cascade = CascadeType.ALL)
    private List<Transaction> transactions = new ArrayList<>();
}
@Entity
public class Transaction {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long transactId;

    @ManyToOne
    Account account;
}

1 个答案:

答案 0 :(得分:0)

我喜欢这样想:

@Entity
public class Account {
    // Here I read this as "One Account (The entity we are in) ToMany Transactions (The foreign entity)
    @OneToMany(cascade = CascadeType.ALL)
    private List<Transaction> transactions = new ArrayList<>();
}
@Entity
public class Transaction {
    // If we use the same process as above we get:
    // Many Transactions (The entity we are in) ToOne Account (The foreign entity)
    @ManyToOne
    Account account;
}