Java 如何在SpringMVC中使用hibernate将用户ID从一个表传递到另一个表

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

我正在使用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 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;
    }
    
  • 来自控制器的所有操作都应该调用服务方法,而不是DAO的方法。服务应该使用DAO访问数据库。i、 e

    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;}