Помогите создать Внутренний обмен сообщениями
Я хочу создать внутреннюю систему обмена сообщениями, и это то, что я сделал, у меня есть 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:
- Один пользователь отправляет много сообщений
- Один пользователь получает много сообщений
Таким образом, ваш класс 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 с открытым исходным кодом и коммерческих версий.