Hibernate один-ко-многим через карту - PullRequest
0 голосов
/ 02 марта 2019

У меня проблемы с настройкой моей привязки Hibernate один-ко-многим с помощью карты.У меня есть 3 таблицы: UserTable, MessageTable и RecipientTable.Здесь таблица получателей содержит информацию о сообщении - какой пользователь получил / прочитал сообщение.Это означает, что каждое сообщение будет иметь несколько связанных получателей.Получатель похож на «точку зрения пользователя» на сообщение.Я хочу быть в состоянии получить RecipientTable из MessageTable по receiverId этого конкретного сообщения.Я попытался сделать это следующим образом.

MessageTable.java

@Entity
@Table(name = "MESSAGE")
public class MessageTable {

    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "MESSAGE_ID", nullable = false)
    private Long messageId;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "SENDER_ID", nullable = false)    
    private UserTable sender;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "RECEIVER_ID", nullable = false)    
    private UserTable receiver;

    @OneToMany(mappedBy = "message", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
    private Map<Long, RecipientTable> recipients = new HashMap<>();

RecipientTable.java

@Entity
@Table(name = "RECIPIENT")
public class RecipientTable {

    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "RECIPIENT_ID", nullable = false)
    private Long recipientId;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "SENDER_ID", nullable = false)
    private UserTable sender;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "RECEIVER_ID", nullable = false)
    private UserTable receiver;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "MESSAGE_ID", nullable = false)
    private MessageTable message;

    @Enumerated(EnumType.STRING)
    @Column(name = "SEENSTATUS", nullable = false)
    private SeenStatus seenStatus;

    @Enumerated(EnumType.STRING)
    @Column(name = "RECEPTIONSTATUS", nullable = false)
    private ReceptionStatus receptionStatus;

Итак, проблема в этой строке:

        @OneToMany(mappedBy = "message", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
    private Map<Long, RecipientTable> recipients = new HashMap<>();

Я пробовал разные вещи, такие как добавление @MapKey(name = "receiver.userId"), но ни одна из них не работает.Как правильно достичь этого?

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