1. /** 
   2. *entity 
   3. */  
   4. public class User implements Serializable {  
   5.     private String username;  
   6.     private String password;  
   7.   
   8.     public String getUsername() {  
   9.         return username;  
  10.     }  
  11.   
  12.     public void setUsername(String username) {  
  13.         this.username = username;  
  14.     }  
  15.   
  16.     public String getPassword() {  
  17.         return password;  
  18.     }  
  19.   
  20.     public void setPassword(String password) {  
  21.         this.password = password;  
  22.     }  
  23. }  
  24.   
  25. /** 
  26. *Action 
  27. */  
  28. public class UserAction{  
  29.     private User user;  
  30.     // UserDAO中在hibernate配置中作了事务代理
  31.     private IUserDAO userDAO;  
  32.     public String saveUser() throws Exception {  
  33.          userDAO.saveUser(user);  
  34.          return "sucess";  
  35.     }  
  36.     public User getUser() {  
  37.         return user  
  38.     }  
  39.     public void setUser(User user) {  
  40.         this.user = user;  
  41.     }  
  42.     public void setUserDAO(IUserDAO userDAO) {  
  43.         this.userDAO = userDAO;  
  44.     }  
  45.     public IUserDAO gerUserDAO() {  
  46.         return userDAO;  
  47.     }  
  48. }  
  49. 
  50. /** 
  51. *HTML 
  52. */  
  53. <form action="login.action">  
  54. <input type="text" name="user.userName"/>  
  55. <input type="password" name="user.password"/>  
  56. <input type="submit" value="注册">  
  57. </form> 当我象上面的代码通过用hibernate保存User对象时,User对象已变成一个被增强对象,通过Session.save(user)方法变成持久态对象时就会抛org.hibernate.MappingException: Unknown entity:entity.User$$EnhancerByCGLIB$$bd3dab68异常。
不知道是不是struts2中转型问题,还是其它原因,那位大哥指定下,谢谢!! 

解决方案 »

  1.   

    试试把action改成下面这样,
    我的想法是,自己控制User对象的初始化。
    25. /** 
      26. *Action 
      27. */  
      28. public class UserAction{  
      29.     private User user=new User();  
      30.     // UserDAO中在hibernate配置中作了事务代理
      31.     private IUserDAO userDAO;  
      32.     public String saveUser() throws Exception {  
      33.          userDAO.saveUser(user);  
      34.          return "sucess";  
      35.     }  
      36.     public User getUser() {  
      37.         return user  
      38.     }  
      39.     //public void setUser(User user) {  
      40.     //    this.user = user;  
      41.     //}  

                        
        .     public void setUsername(String username) {  
        .         this.user.setUsername(username);  
        .     }  
        .     public void setPassword(String password) {  
        .         this.user.setPassword(password);  
        .     }  
      42.     public void setUserDAO(IUserDAO userDAO) {  
      43.         this.userDAO = userDAO;  
      44.     }  
      45.     public IUserDAO gerUserDAO() {  
      46.         return userDAO;  
      47.     }  
      48. }  
      

  2.   

    我的意思是UserAction 对象中的user是通过封装表单中的数据得到的,怎么直接new呢???
      

  3.   

    呵呵...以为是Struts1呢..两个版本是不太一样的..
      

  4.   

    lz在UserAction中print一下传来的user参数看看好久没用了
      

  5.   

    System.out.println(user.getClass()):class entity.Apply$$EnhancerByCGLIB$$bd3dab68
      

  6.   

    要new一个对象的,你去用System.out.println();来打印信息到控制台就可以看到内部的执行步骤的
    每次封装属性的时候,都是先从Action中getUser()获得user对象,然后,再调用相应的set方法来设置属性的
    不new对象的时候,第一次执行getUser()的时候获得的是null,对null来调用设置属性方法的时候就抛异常了
      

  7.   

    public class UserAction{  
           private User user=new User();  //因为你要获得USER对象里的值必须要把这个对象给NEW出来
          // UserDAO中在hibernate配置中作了事务代理
          private IUserDAO userDAO;  
           public String saveUser() throws Exception {  
               userDAO.saveUser(user);  
                return "sucess";  
           }  
          public User getUser() {  
              return user  
      
       }  
    <input type="text" name="user.userName"/>  //跟实体类里面的属性字段不一样
    public void setUsername(String username) {  
              this.username = username;  
        }  
    :<input type="text" name="user.username">
      

  8.   

    果然产要new,终于懂了,谢谢各位好心人的回复。
      

  9.   

    应该用new也可以啊,只要有getter和setter方法