Помогите создать Внутренний обмен сообщениями

Я хочу создать внутреннюю систему обмена сообщениями, и это то, что я сделал, у меня есть User Entities для пользователя и один для сообщения

Я не знаю, хорошо это или нет

public class Utilisateur implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String name;

...

}

public class Messagerieinterne implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String sujet;
private Long   Idexpiditeur;
private Long IdReceiver ;

..}

Проблема с этим решением заключается в том, что я должен использовать метод nativeQuery для вставки данных в базу данных.

если у вас есть предложения, пожалуйста,

для более подробного объяснения я хочу создать систему обмена сообщениями для своего сайта (JSF2,EJB3,MYSQL), чтобы пользователи могли отправлять сообщения между ними

заранее спасибо

2 ответа

Решение

Цель JPA - создать график постоянных объектов. Эти сущности связаны между собой благодаря отношениям OneToOne, OneToMany и ManyToMany, чтобы иметь возможность перемещаться по графику. Таким образом, объект Message должен иметь поле получателя типа User и поле отправителя, также типа User. Вы также можете смоделировать обратные отношения: у пользователя много отправленных сообщений и много полученных сообщений. Таким образом, у вас есть два отношения OneToMany:

  1. Один пользователь отправляет много сообщений
  2. Один пользователь получает много сообщений

Таким образом, ваш класс Message должен выглядеть так:

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 для вставки и чтения сообщений в базе данных.

Почему вы не можете попробовать JMS? JMS (JMS - это спецификация, а JMS-провайдер - это библиотека / программное обеспечение, которое реализует спецификацию), разработанная для таких требований, как ваши, и поддерживает множество функций, таких как модель точка-точка (один к одному) и модель публикации-подписки (один ко многим), и может быть сделано отказоустойчивым с минимальным количеством кода. Существует несколько реализаций JMS с открытым исходным кодом и коммерческих версий.

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