【发布时间】:2015-08-25 21:02:55
【问题描述】:
我有这些课程:
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();
}
}
当我尝试编写下一个查询时,问题就开始了:
- 获取用户发送或接收的所有聊天室消息。
- 获取用户在聊天室发送或接收的所有聊天室消息。
您能否提供有关如何解决查询的想法?
【问题讨论】:
-
“问题开始了……”哪个问题?
-
我的意思是构建查询的标准。
标签: java hibernate jpa jpa-2.0 criteria