我正在尝试编写hql查询以使用这种方法来检索用户的当前会话
@Autowired
private SessionFactory _sessionFactory;
private Session getSession() {
return _sessionFactory.getCurrentSession();
}
我正在努力实现这样的目标
return getSession().createQuery("SELECT FROM Users u WHERE u.id = :userIdFromSession AND u.isAdmin = true").list();
这是我的方法
return getSession().createQuery("SELECT FROM Users u WHERE u.id = " +:getSession() +"AND u.isAdmin = true").list();
假设获取器和设置器到位,这是用户实体类
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "userId")
private Long id;
@Column(nullable = false)
private String name;
@Column(unique = true, nullable = false)
private String email;
@Column(nullable = false)
private long timestamp;
@OneToOne
@JoinColumn(name = "adminId",nullable = false)
Admin admin;
@Column(nullable = true)
private boolean isAdmin;
假设使用getter和setter方法,这是聊天实体类
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "chatId")
private Long id;
private String message;
@OneToOne
@JoinColumn(name = "userId")
User user;
现在您可以看到该聊天引用了该用户。您必须先是用户才能聊天,因此我想以这种方式在dao类中检索用户的聊天
// return getSession().createQuery("SELECT FROM Chats u WHERE u.id = :userIdFromSession AND u.isAdmin = true").list();
这是我用来在控制器类中创建用户的方法
@RequestMapping(value = "/create-user", method = RequestMethod.POST)
public ModelAndView createUser(HttpServletRequest request,
HttpServletResponse response,
@RequestParam String name,
@RequestParam String email) {
try {
// create new user object
User user = new User();
user.setName(name);
user.setEmail(email);
user.setTimestamp(new Date().getTime());
// save user in db (if new)
if (_userDao.getByEmail(email) == null) {
_userDao.save(user);
}
// save in cookie
Cookie cookie = new Cookie("name", name);
Cookie cookie1 = new Cookie("email", email);
response.addCookie(cookie);
response.addCookie(cookie1);
} catch (Exception e) {
e.printStackTrace();
//logger.error("Exception in creating user: ", e.getStackTrace());
}
return new ModelAndView("redirect:/");
}
这种方法不仅会抛出编译错误,而且还无法解决问题。请协助!
在Hibernate的Session无关与用户的会话。您可以根据与数据库的连接来考虑它。
SessionFactory#getCurrentSession()
如果当前会话已经打开,则返回当前会话。通过它,您可以查询数据库。
我现在了解您的问题的方式是,确定将要处理身份验证的Spring MVC控制器。您的createUser()方法可能是其中之一,但是肯定您在某处还需要authenticateUser()。假设电子邮件是唯一的,并且您使用电子邮件作为登录名对用户进行身份验证。假设您的getByEmail方法返回一个用户POJO。我将保留异常处理和Spring MVC的内容。
public ModelAndView authenficateUser(HttpServletRequest request,
HttpServletResponse response,
@RequestParam String email) {
User u = _userDao.getByEmail(email);
if (u == null) {
// deal with unknown user and return to login form
} else {
request.getSession().setAttribute("email", email);
// success
}
}
然后,您应该在某个地方的控制器中有一个getChats方法。
public ModelAndView getChats(HttpServletRequest request,
HttpServletResponse response) {
String email = (String) request.getSession().getAttribute("email");
if (email == null) {
// user is not logged in, deal with it.
} else {
List<Chat> chats = _chatDao.getChats(email);
return new ModelAndView("chatView", "chats", chats);
}
}
在ChatDao中,您可以使用以下方法:
List<Chat> getChats(String email) {
String hql = "from Chat c where c.user.email = :email";
_sessionFactory.getCurrentSession().createQuery(hql).setParameter("email", email).list();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句