У меня есть эти классы:JPA многие ко многим Query
Chatroom класса: класс
@Entity
public class ChatRoom {
@Column(name="chatroom_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long chatroomId;
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(
name="CHATROOM_USER",
joinColumns = {@JoinColumn(name="chatroom_id",referencedColumnName="chatroom_id")},
inverseJoinColumns={@JoinColumn(name="user_id",referencedColumnName="user_id")}
)
private Set<User> users;
@OneToMany(mappedBy="chatroom", cascade=CascadeType.PERSIST, orphanRemoval=true)
private Set<ChatRoomMessage> messages;
}
Пользователь:
@Entity
public class User {
@Id
@Column(name="user_id", length=40, unique=true, updatable=false)
private String userId;
}
ChatRoomMessage класс:
@Entity
public class ChatRoomMessage {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long messageId;
@ManyToOne(optional=false)
@JoinColumn(name="session_id", nullable=false)
private User sender;
@ManyToOne(optional=false)
@JoinColumn(name="chatroom_id", nullable=true)
private ChatRoom chatroom;
}
Если я хочу, чтобы все сообщения, отправленные пользователем модуля я сделал это в DAO:
MessagesDAO класса:
@Repository
public class MessageDaoImpl implements MessageDaoI {
@Override
public List<ChatRoomMessage> getMessages(User u){
Criteria c = sessionFactory.getCurrentSession().createCriteria(ChatRoomMessage.class, "cmessage");
c.createAlias("cmessage.sender", "sender");
c.add(Restrictions.eq("sender", u));
return c.list();
}
}
Проблема начинается тогда, когда я пытаюсь кодировать следующие запросы:
- Получить все сообщения в чате, отправленные или полученные пользователем.
- Получить все сообщения в чате, отправленные или полученные пользователем в чате.
Не могли бы вы дать идеи о том, как решить запросы ?.
_ «Проблема начинается ...» _ Какая проблема? –
Проблема, которую я имею в виду, заключается в структурировании критериев для запросов. – lennin92