OneToMany не возвращает значения, сохраненные из другого объекта - PullRequest
0 голосов
/ 08 мая 2018

У меня есть структура сущности:

@Entity
@Table(name = "users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", updatable = false, nullable = false)
    private Long id;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "user", cascade = { CascadeType.ALL })
    List<UserAgreement> userAgreements= new ArrayList<>();

}

@Entity
@Table(name = "user_agreements")
public class UserAgreement {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", updatable = false, nullable = false)
    private Long id;

    @ManyToOne(cascade = CascadeType.REFRESH)
    @JoinColumn(name = "user_id")
    private User user;

    @ManyToOne(cascade = CascadeType.REFRESH)
    @JoinColumn(name = "agreement_id")
    private Agreement agreement;
}


@Entity
@Table(name = "agreements")
public class Agreement {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", updatable = false, nullable = false)
    private Long id;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "agreement", cascade = { CascadeType.ALL })
    List<UserAgreement> userAgreements = new ArrayList<>();
}

Я использую Spring Boot с JpaRepository. Когда я использую AgreementRepository extends JpaRepository<Agreement, Long> для сохранения Соглашения и связанного с ним Соглашения пользователя, оно работает хорошо и каскадирует необходимые поля в БД:

agreement.getUserAgreements().add(new UserAgreement(user, agreement, status));
agreementRepository.save(agreement);

Однако после сохранения, если попытаться получить user.getActiveUserAgreements(), я получаю пустой список. Это не обновляет.

Как заставить сущность пользователя получить List<UserAgreement>, который был сохранен с другой стороны?

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Это выглядит как ассоциация многих ко многим. Возможно, вы удалите класс UserAgreement. В любом случае, для его поддержки необходимо написать вспомогательные методы addAgreement (), removeAgreement () и т. Д. Подробнее здесь https://vladmihalcea.com/the-best-way-to-use-the-manytomany-annotation-with-jpa-and-hibernate/

0 голосов
/ 08 мая 2018

Из Wikibooks: OneToMany

Отношения двунаправленные, так как приложение обновляет один сторона отношений, другая сторона также должна обновляться, и быть в синхронизации. В JPA, как и в Java в целом, это ответственность приложение или объектная модель для поддержания отношений. Если Ваше приложение добавляет одну сторону отношений, то оно должно добавить на другую сторону.

Это означает, что вам необходимо присвоить UserAgreement User при создании отношения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...