【问题标题】:How to pass userid from one table to another table in spring mvc using hibernate如何使用休眠将用户ID从一个表传递到spring mvc中的另一个表
【发布时间】:2014-11-28 05:26:14
【问题描述】:

我正在使用 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
}

我正在使用 spring security 从表中获取当前用户的全部数据。这是代码:

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

我想要的是将我从currentUser.getUserId() 获得的用户 ID 发送到其他方法。在该方法中,我将映射到其他一些表,例如 user_detail 表,其中 id 是主键。通过发送 id,我将得到 user_table 中不存在的其他 user_details。

这是我的UserDetail

@Entity(name = "user_detail")
@Table(name = "user_detail")
public class UserDetail {

    @Id
    @GeneratedValue
    @Column(name = "id")
    private String userId;

    //some other details like Address .
    //getter and setter.
}

从控制器我这样调用上述方法:

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

现在我得到的结果是 null 。像用户为空。我在这里做错了什么?

【问题讨论】:

  • if (users.size() &gt; 0) {return null;} else { return null;} - 你总是从findUserById 方法返回null
  • @Daniel..ok 那是一个错误。另一个任何错误,因为它没有从 user_detail 表中打印任何内容。
  • 看到我得到的输出是 - 像这样的用户 id []。意味着它在方法中没有得到正确的 id。这就是它打印空白的原因。

标签: java mysql hibernate spring-mvc


【解决方案1】:

您的代码中有几个问题。只是指出其中一些:

  1. UserService userService = new UserService(); - 您正在手动创建服务对象,而不是让 Spring-MVC 将其注入您的控制器,即:

    @Autowired private UserService userService ;

  2. UserDAO 应该被注入到你的服务中,而不是从你的控制器中调用:

    class UserServiceImpl implements UserService{
    
        @Autowired
        private UserDAO userDAO;
    }
    
  3. 来自控制器的所有操作都应该调用服务方法,而不是 DAO 的方法。该服务应使用 DAO 进行数据库访问。即

    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);
      }
}
  1. if (users.size() > 0) { return null; } else { return null; }

    总是返回null。应该是:

     if (`users.isEmpty()){ 
          return users.get(0);
     }else { return null;}
    
  2. users = sessionFactory.getCurrentSession().createQuery("from user_detail where id= ?").setParameter(0, id).list();

    您的查询是错误的。您应该使用当前的 bean 类名而不是查询中的表名,即createQuery("FROM UserDetail WHERE id = ?")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多