Java 如何在SpringMVC中使用hibernate将用户ID从一个表传递到另一个表
我正在使用Spring安全性进行登录。我有Java 如何在SpringMVC中使用hibernate将用户ID从一个表传递到另一个表,java,mysql,hibernate,spring-mvc,Java,Mysql,Hibernate,Spring Mvc,我正在使用Spring安全性进行登录。我有User.java,其中包含用户详细信息 @Entity(name = "user_table") //@Table(name = "user_table") public class User { @Id @Column(name = "id") private String userId; @Column(name = "email" ,unique = true) private String us
User.java
,其中包含用户详细信息
@Entity(name = "user_table")
//@Table(name = "user_table")
public class User {
@Id
@Column(name = "id")
private String userId;
@Column(name = "email" ,unique = true)
private String userEmail;
@Column(name = "password")
private String userPassword;
//getter and setters
}
我使用SpringSecurity从表中获取当前用户的全部数据。代码如下:
public User findUserByEmail(String email) {
List<User> users = new ArrayList<User>();
try{
users = sessionFactory.getCurrentSession().createQuery("from user_table where email= ?").setParameter(0, email).list();
System.out.println("user is " +users);
}catch(Exception e){
System.out.println(e.getMessage());
e.printStackTrace();
}
if (users.size() > 0) {
return users.get(0);
} else {
return null;
}
}
@Override
public User getCurrentUser() {
Authentication auth = SecurityContextHolder.getContext()
.getAuthentication();
User currentUser = new User();
if (!(auth instanceof AnonymousAuthenticationToken)) {
UserDetails userDetails = (UserDetails) auth.getPrincipal();
System.out.println("User has authorities: "
+ userDetails.getAuthorities());
System.out.println("USERNAME:: "+userDetails.getUsername());
currentUser = findUserByEmail(userDetails
.getUsername());
System.out.println("currentUser "+currentUser);
System.out.println("currentUser "+currentUser.getUserId());
return currentUser;
}
return null;
}
我从controller调用上述方法,如下所示:
UserService userService = new UserService();
User user=userDao.getCurrentUser();
String userId = user.getUserId();
System.out.println(userId);
UserDetail u=userDao.findUserById(userId);
这是我传递当前用户id的方法:
public UserDetail findUserById(String id) {
// TODO Auto-generated method stub
List<String> users = new ArrayList<String>();
try{
users = sessionFactory.getCurrentSession().createQuery("from user_detail where id= ?").setParameter(0, id).list();
System.out.println("user is " +users);
}catch(Exception e){
System.out.println(e.getMessage());
e.printStackTrace();
}
if (users.size() > 0) {
return null;
} else {
return null;
}
}
public UserDetail findUserById(字符串id){
//TODO自动生成的方法存根
列表用户=新建ArrayList();
试一试{
users=sessionFactory.getCurrentSession().createQuery(“来自用户详细信息,其中id=?”).setParameter(0,id).list();
System.out.println(“用户为”+用户);
}捕获(例外e){
System.out.println(e.getMessage());
e、 printStackTrace();
}
如果(users.size()>0){
返回null;
}否则{
返回null;
}
}
现在我得到的结果是空的。Like用户为空。我做错了什么?您的代码中有几个问题。我只想指出其中一些:
UserService UserService=newuserservice()代码>-您正在手动创建服务对象,而不是让Spring MVC将其注入控制器,即:
@Autowired
私人用户服务代码>
UserDAO
应该注入到您的服务中,而不是从您的控制器调用:
class UserServiceImpl implements UserService{
@Autowired
private UserDAO userDAO;
}
UserDetail u=userDao.findUserById(userId)代码>
应该成为
UserDetail u=userService.findUserById(userId)代码>
class UserServiceImpl implements UserService{
@Autowire
private UserDAO userDAO;
@Override
public UserDetail findUserById(Long userId){
return userDAO.findUserById(userId);
}
}
if(users.size()>0){
返回null;
}否则{
返回null;
}
总是返回null
。应该是:
if (`users.isEmpty()){
return users.get(0);
}else { return null;}
users=sessionFactory.getCurrentSession().createQuery(“来自用户详细信息,其中id=?”).setParameter(0,id).list()代码>
你的问题是错误的。您应该在查询中使用当前的bean类名,而不是表名,即createQuery(“FROM UserDetail WHERE id=?”)
if(users.size()>0){return null;}else{return null;}
-您总是从findUserById
方法返回null
。@Daniel..好的,这是一个错误。另一个错误是因为它没有从user\u详细信息表中打印任何内容。请参阅我作为-user id[]获得输出像这样。意味着它在方法中没有得到正确的id。这就是为什么它的打印是空白的。
if (`users.isEmpty()){
return users.get(0);
}else { return null;}