2012-01-13 59 views
1

對於計算機編程的世界來說,我幾乎是全新的,所以對於深入理解許多概念來說,這是一場艱苦的鬥爭。現在,我正在開發一個我們正在實現Spring MVC的項目。該項目的第一步是爲網站製作一個登錄頁面。我試過一個我們在課堂上做造型後,我的,但我似乎無法讓過去下面的錯誤在我的網頁瀏覽器:Spring MVC error

Unsupported auto value type java.lang.String for field injuryReports.Login.userName 

這裏是我的登錄實體類:

package injuryReports; 

import java.io.Serializable; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 

@Entity 
public class Login implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id @GeneratedValue 
    private String userName; 
    private String password; 
    private int userId; 

    public String getUserName() { 
     return userName; 
    } 

    public void setUserName(String userName) { 
     this.userName = userName; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    public int getUserId() { 
     return userId; 
    } 

    public void setUserId(int userId) { 
     this.userId = userId; 
    } 

    public Login() { 
    } 

    public Login(String userName, String password) { 
     super(); 
     this.userName = userName; 
     this.password = password; 
    } 

    public Login(int userId, String userName2, String password2) { 
     this.userId = userId; 
     this.userName = userName2; 
     this.password = password2; 
    } 
} 

我LoginDao類:

package injuryReports; 

import java.util.List; 

import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 
import javax.persistence.TypedQuery; 
import org.springframework.stereotype.Component; 
import org.springframework.transaction.annotation.Transactional; 

/** 
* 
* @author nGent 
* 
*/ 

@Component 
public class LoginDao { 
    @PersistenceContext private EntityManager em; 

    @Transactional 
    public void persist(Login user) { 
     em.persist(user); 
    } 

    public List<Login> getAllUsers() { 
     TypedQuery<Login> query = em.createQuery(
       "Select u FROM Login u ORDER BY u.id", Login.class); 
     return query.getResultList(); 
    } 

    public Login validateLogin(String userName, String password) { 
     Login login = null; 
     TypedQuery<Login> query = em.createQuery(
       "Select u From Login u where u.userName = :userName " + 
       " and u.password = :password", Login.class).setParameter(
       "userName", userName).setParameter("password", password); 
     try { 
      login = query.getSingleResult(); 
     } 
     catch (Exception e) { 
      //TODO: Handle Exception 
     } 
     return login; 
    } 
} 

而且我的LoginController類:

package injuryReports; 

import java.util.HashMap; 
import java.util.Map; 

import javax.servlet.http.HttpServletRequest; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.servlet.ModelAndView; 

@Controller 
public class LoginController { 

    @Autowired 
    private LoginDao loginDao; 

    @RequestMapping(value = "/user", method = {RequestMethod.POST}) 
    public ModelAndView userEntry(HttpServletRequest request) { 
     String userName = request.getParameter("userName"); 
     String password = request.getParameter("password"); 

     if (userName != "" && password != "") { 
      loginDao.persist(new Login(userName, password)); 
     } 

     return new ModelAndView("logon.jsp", "loginDao", loginDao); 
    } 

    @RequestMapping(value = "/login") 
    public ModelAndView login(HttpServletRequest request) { 
     String userName = request.getParameter("userName"); 
     String password = request.getParameter("password"); 
     String page = "login.jsp"; 

     if (userName != "" && password != "") { 
      try { 
       Login login = loginDao.validateLogin(userName, password); 
       if (login != null) { 
        request.getSession().setAttribute("UserId", login.getUserId()); 
        page = "login.jsp"; 
       } 
      } 
      catch (Exception e) { 
       //TODO: Handle Exception 
      } 
     } 
     return new ModelAndView(page, getDaos()); 
    } 

    @RequestMapping(value = "/logon", method = {RequestMethod.GET}) 
    public ModelAndView logon(HttpServletRequest request) { 
     //int userId = (Integer) request.getSession().getAttribute("userId"); 
     //request.getSession().setAttribute("UserID", userId); 
     return new ModelAndView("logon.jsp", getDaos()); 
    } 

    public Map<String, Object> getDaos() { 
     Map<String, Object> models = new HashMap<String, Object>(); 
     models.put("loginDao", loginDao); 
     return models; 
    } 
} 

對不起,這有點長 - 我想提供儘可能多的信息。我非常感謝任何幫助!

+0

你註釋錯誤的ID字段;使用...以及'userId'字段。 – 2012-01-13 16:40:46

回答

7

您不能在String屬性上使用@GeneratedValue。它使用數據庫序列或AUTOINCREMENT功能,具體取決於底層數據庫引擎。

要麼刪除此註釋:

@Id 
private String userName; 

或使用整數/長ID:

@Id @GeneratedValue 
private int userId;