Цель JPA - создать график постоянных объектов.Эти сущности связаны между собой благодаря отношениям OneToOne, OneToMany и ManyToMany, чтобы иметь возможность перемещаться по графику.Таким образом, объект Message должен иметь поле получателя типа User и поле отправителя, также типа User.Вы также можете смоделировать обратные отношения: у пользователя много отправленных сообщений и много полученных сообщений.Таким образом, у вас есть два отношения OneToMany:
- Один пользователь отправляет много сообщений
- Один пользователь получает много сообщений
Таким образом, ваш класс сообщений должен выглядеть следующим образом:
public class MessagerieInterne implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String sujet;
@ManyToOne(optional = false)
@JoinColumn(name = "ID_EXPEDITEUR", nullable = false)
private Utilisateur expediteur;
@ManyToOne(optional = false)
@JoinColumn(name = "ID_DESTINATAIRE", nullable = false)
private Utilisateur destinataire;
И у вас могут быть дополнительные поля в вашем классе User:
public class Utilisateur implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToMany(mappedBy = "expediteur")
private List<MessagerieInterne> messagesEnvoyes;
@OneToMany(mappedBy = "destinataire")
private List<MessagerieInterne> messagesRecus;
Думайте в терминах объектов вместо того, чтобы думать в терминах полей в таблице базы данных.Кроме того, соблюдайте соглашения об именах Java (переменные начинаются со строчной буквы, camelCase и т. Д.) И избегайте смешивания французских и английских терминов.
С такими объектами я не понимаю, почему вы не можете использоватьEJBQL и обычные методы JPA для вставки и чтения сообщений в базе данных.