Как осмыслить отображение @OneToMany в JPA / Hibernate - PullRequest
0 голосов
/ 11 октября 2019

Я только начал изучать JPA и Hibernate, я не понимаю, как правильно читать / концептуализировать отображение @OneToMany в JPA с помощью Hibernate.

В качестве примера представьте себе и Account, который может иметь много транзакций, ноОдна транзакция может быть связана только с одной учетной записью.

Так что я прочитал эту перспективу для «Класс / сущность учетной записи» как «Одна учетная запись может иметь много транзакций, поэтому я должен пометить поле« Транзакция »как @ OneToMany.

И наоборот: «Класс / сущность транзакции» Я думаю, что «Одна транзакция может быть связана только с одной учетной записью, поэтому я должен пометить поле« Учетная запись »в сущности транзакции как @OneToOne»

Но из почти всех видео-видеоуроков, которые я смотрел, и веб-ресурсы упоминают, что поле Учетная запись Транзакции должно быть @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 голосов
/ 11 октября 2019

Мне нравится думать об этом так:

@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;
}
...