Отношения OneToMany и ManyToOne

У меня есть 2 таблицы, сопоставленные @OneToMany и @ManyToOne, а также их установщики и получатели, поэтому у пользователя может быть несколько транзакций, а транзакция может иметь только одного пользователя.

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

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

Единственный способ - добавить транзакцию в список пользователя и назначить пользователя для транзакции. Почему это происходит? Я думал, что если я использую только одно из этих действий, обратное должно быть доступно автоматически.

пользователь

@Entity
@Table(name = "users")
public class User{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@OneToMany(mappedBy = "user")
private Collection<Transaction> transactions;

Сделка

@Entity
@Table(name="user_transactions")
public class Transaction{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;

Я не вижу никакой разницы в таблицах, любые действия, которые я выполняю, имеют одинаковую структуру. Как JPA узнает, как я сохранил объекты и построил их снова...?

1 ответ

Насколько я помню, по умолчанию нет CascadeType. Вы должны указать один, например, в вашем случае:

@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private Collection<Transaction> transactions;

Вы можете прочитать о типах каскадов здесь: http://howtodoinjava.com/hibernate/hibernate-jpa-cascade-types/

Другие вопросы по тегам