помогите создать Внутренний обмен сообщениями - PullRequest
0 голосов
/ 17 января 2011

Я хочу создать внутреннюю систему обмена сообщениями, и это то, что я сделал, у меня есть 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 ]

2 голосов
/ 17 января 2011

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

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

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

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

1 голос
/ 17 января 2011

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

...