Hibernate List为空或null。可能是什么原因

时间:2011-11-02 03:36:32

标签: hibernate spring-mvc

我在这段代码中没有看到任何异常。它运行正常但是当它返回时,我调用的列表中没有数据。在会话中调用getAll。 可能是什么原因。

这是我的电话会议。

import java.util.List;

import javax.annotation.Resource;

import org.apache.log4j.Logger;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import apps.user.User;

/**
 * Service for processing Users
 *
 */
@Service("userService")
@Transactional
public class UserService {

 protected static Logger logger = Logger.getLogger("service");

 @Autowired
 @Resource(name="sessionFactory")
 private SessionFactory sessionFactory;

 /**
  * Retrieves all Users
  *
  * @return a list of Users
  */
 public List<User> getAll() {
  logger.debug("Retrieving all Users");

  // Retrieve session from Hibernate
  Session session = sessionFactory.getCurrentSession();

  // Create a Hibernate query (HQL)
  //createQuery("from springapp.domain.Product");
  List<User> list= (List<User>) session.createCriteria( User.class ).list();
  //session.createQuery(" FROM  User");

  // Retrieve all
  return list; 
 }

 /**
  * Retrieves a single User
  */
 public User get( Integer id ) {
  // Retrieve session from Hibernate
  Session session = sessionFactory.getCurrentSession();

  // Retrieve existing User first
  User User = (User) session.get(User.class, id);

  return User;
 }
 /**
  * Adds a new User
  */
 public void add(User User) {
  logger.debug("Adding new User");

  // Retrieve session from Hibernate
  Session session = sessionFactory.getCurrentSession();

  // Save
  session.save(User);
 }

 /**
  * Deletes an existing User
  * @param id the id of the existing User
  */
 public void delete(Integer id) {
  logger.debug("Deleting existing User");

  // Retrieve session from Hibernate
  Session session = sessionFactory.getCurrentSession();

  // Retrieve existing User first
  User User = (User) session.get(User.class, id);

  // Delete
  session.delete(User);
 }

 /**
  * Edits an existing User
  */
 public void edit(User User) {
  logger.debug("Editing existing User");

  // Retrieve session from Hibernate
  Session session = sessionFactory.getCurrentSession();

  // Retrieve existing User via id
  User existingUser = (User) session.get(User.class, User.getUserId());

  // Assign updated values to this User
  existingUser.setFirstName(User.getFirstName());
  existingUser.setLastName(existingUser.getLastName());
  existingUser.setPassword(existingUser.getPassword());

  // Save updates
  session.save(existingUser);
 }

这是用户代码。

import java.io.Serializable;
import java.sql.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Column;
import javax.persistence.GenerationType;
import javax.validation.constraints.Size;

import org.hibernate.validator.constraints.NotEmpty;
import org.springframework.beans.factory.annotation.Autowired;
/**
 * For a complete reference see
 * <a href="http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/">
 * Hibernate Annotations Communit Documentations</a>
 */
@Entity
@Table(name = "tblUser")
public class User implements Serializable {

    public User(){
    String s=null;
    }

    @Column(name = "password")
private String password;
    @Column(name = "firstName")
private String firstName;
    @Column(name = "middleName")
private String middleName;
    @Column(name = "lastName")
private String lastName;
    @Column(name = "emailAddress")
private String emailAddress;

/**
     * @return the emailAddress
     */
    public String getEmailAddress() {
        return emailAddress;
    }
    /**
     * @param emailAddress the emailAddress to set
     */
    public void setEmailAddress(String emailAddress) {
        this.emailAddress = emailAddress;
    }

    /**
     * @param lastLoginDate the lastLoginDate to set
     */
@Id
@NotEmpty
@Column(name="userId")
private String userId;

//private int userAccessLevel;
/**
 * @return the userId
 *
public String getUserId() {
    return userId;
}
**
 * @param userId the userId to set
 *
public void setUserId(String userId) {
    this.userId = userId;
}
/**
 * @return the password
 */
public String getPassword() {
    return password;
}
/**
 * @param password the password to set
 */
public void setPassword(String password) {
    this.password = password;
}
/**
 * @return the firstName
 */
public String getFirstName() {
    return firstName;
}
/**
 * @param firstName the firstName to set
 */
public void setFirstName(String firstName) {
    this.firstName = firstName;
}
/**
 * @return the middleName
 */
public String getMiddleName() {
    return middleName;
}
/**
 * @param middleName the middleName to set
 */
public void setMiddleName(String middleName) {
    this.middleName = middleName;
}
/**
 * @return the lastName
 */
public String getLastName() {
    return lastName;
}
/**
 * @param lastName the lastName to set
 */
public void setLastName(String lastName) {
    this.lastName = lastName;
}
/**
 * @return the userAccessLevel
 *
public int getUserAccessLevel() {
    return userAccessLevel;
}
*/
/**
 * @param userAccessLevel the userAccessLevel to set
 *
public void setUserAccessLevel(int userAccessLevel) {
    this.userAccessLevel = userAccessLevel;
}*/
public void setUserId(String userId) {
    this.userId = userId;
}
public String getUserId() {
    return userId;
}

}

现在,即使我将@Table更改为指向不存在的完全不相关的表(如htblUser),我也看不到任何失败。 这是我的配置,它绑定了所有带注释的代码。 mysql_persistence_info.xml

 <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
     xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="
   http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/tx
   http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
   http://www.springframework.org/schema/context
   http://www.springframework.org/schema/context/spring-context-3.0.xsd
    ">
 <!-- Load Hibernate related configuration --> 

<tx:annotation-driven transaction-manager="transactionManager" /> 
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close"
    p:url="jdbc:mysql://localhost/TestDb"
    p:driverClassName="com.mysql.jdbc.Driver"
    p:username="root"
    p:password="******"
    p:initialSize="1"
    p:maxActive="5"

   />
     <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"

    p:configLocation="/WEB-INF/spring/appServlet/hibernate-cfg.xml">
    <property name="dataSource" ref="dataSource" />
        <property name="annotatedClasses">
            <list>
                <value>apps.user.User</value>
            </list>
        </property>
    </bean>



<!-- Declare a transaction manager-->
 <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"
          p:sessionFactory-ref="sessionFactory" />    
    </beans>

这是apoconfigg.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->

    <!-- Enables the Spring MVC @Controller programming model -->
    <annotation-driven />
    <!-- Activates various annotations to be detected in bean classes -->
    <context:annotation-config />
    <!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
    <resources mapping="/resources/**" location="/resources/" />

    <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
    <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <beans:property name="prefix" value="/WEB-INF/views/" />
        <beans:property name="suffix" value=".jsp" />
    </beans:bean>

        <!-- Imports user-defined @Controller beans that process client requests -->

    <context:component-scan base-package="apps" />

    <beans:import resource="mysql_persistence_info.xml" />
</beans:beans>

这是我的UserLoginController.java

import java.util.Iterator;
import java.util.List;

import javax.annotation.Resource;
import javax.validation.Valid;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.SessionAttributes;
import apps.services.UserService;
import apps.user.User;

@Controller
@SessionAttributes

    //@RequestMapping()
    public class UserLoginController {
     @Resource(name="userService")
     @Autowired
     private UserService userService;
     protected static Logger logger = null;//Logger.getLogger("controller");
    public UserLoginController(){

    }

     /**
      * Handles and retrieves all users and show it in a JSP page
      *
      * @return the name of the JSP page
      */
        @RequestMapping(value = "/users", method = RequestMethod.GET)
        public String getUsers(Model model) {

         logger.debug("Received request to show all users");

         // Retrieve all users by delegating the call to UserService
         List<User> users = userService.getAll();

         // Attach users to the Model
         model.addAttribute("users", users);

         // This will resolve to /WEB-INF/jsp/userspage.jsp
         return "userspage";
     }

        /**
         * Retrieves the add page
         *
         * @return the name of the JSP page
         */
        @RequestMapping(value = "/users/add", method = RequestMethod.GET)
        public String getAdd(Model model) {
         logger.debug("Received request to show add page");

         // Create new User and add to model
         // This is the formBackingOBject
         model.addAttribute("userAttribute", new User());

         // This will resolve to /WEB-INF/jsp/addpage.jsp
         return "addpage";
     }

        /**
         * Adds a new user by delegating the processing to UserService.
         * Displays a confirmation JSP page
         *
         * @return  the name of the JSP page
         */
        @RequestMapping(value = "/users/add", method = RequestMethod.POST)
        public String add(@ModelAttribute("userAttribute") User user) {
      logger.debug("Received request to add new user");

         // The "userAttribute" model has been passed to the controller from the JSP
         // We use the name "userAttribute" because the JSP uses that name

      // Call UserService to do the actual adding
      userService.add(user);

         // This will resolve to /WEB-INF/jsp/addedpage.jsp
      return "addedpage";
     }

        /**
         * Deletes an existing user by delegating the processing to UserService.
         * Displays a confirmation JSP page
         *
         * @return  the name of the JSP page
         */
        @RequestMapping(value = "/users/delete", method = RequestMethod.GET)
        public String delete(@RequestParam(value="id", required=true) Integer id,
                  Model model) {

      logger.debug("Received request to delete existing user");

      // Call UserService to do the actual deleting
      userService.delete(id);

      // Add id reference to Model
      model.addAttribute("id", id);

         // This will resolve to /WEB-INF/jsp/deletedpage.jsp
      return "deletedpage";
     }

        /**
         * Retrieves the edit page
         *
         * @return the name of the JSP page
         */
        @RequestMapping(value = "/users/edit", method = RequestMethod.GET)
        public String getEdit(@RequestParam(value="id", required=true) Integer id, 
                  Model model) {
         logger.debug("Received request to show edit page");

         // Retrieve existing User and add to model
         // This is the formBackingOBject
         model.addAttribute("userAttribute", userService.get(id));

         // This will resolve to /WEB-INF/jsp/editpage.jsp
         return "editpage";
     }

        /**
         * Edits an existing user by delegating the processing to UserService.
         * Displays a confirmation JSP page
         *
         * @return  the name of the JSP page
         */
        @RequestMapping(value = "/users/edit", method = RequestMethod.POST)
        public String saveEdit(@ModelAttribute("userAttribute") User user,
                     @RequestParam(value="id", required=true) String id,
                    Model model) {

        logger.debug("Received request to update user");

         // The "userAttribute" model has been passed to the controller from the JSP
         // We use the name "userAttribute" because the JSP uses that name

         // We manually assign the id because we disabled it in the JSP page
         // When a field is disabled it will not be included in the ModelAttribute
         user.setUserId(id);

         // Delegate to UserService for editing
         userService.edit(user);

         // Add id reference to Model
      model.addAttribute("id", id);

         // This will resolve to /WEB-INF/jsp/editedpage.jsp
      return "editedpage";
     }


    @RequestMapping("/account")
    //  public String updateAccount (
            public String processupdate(@ModelAttribute("user") User user,
    BindingResult result, Model model){

               // @ModelAttribute("userLogin") User userLogin,
//              Model model) {

            // use fooService to save the changes contained <span class="searchterm4">in</span> the foo object
            //fooService.saveFoo(foo);
        System.out.println("inside here /account ..");

        //model.addAttribute("userAdminLogin", userLogin);
         return "home";
        }

        @RequestMapping(value="/home" , method = RequestMethod.GET)
    //@ModelAttribute("user")
        public String process(@ModelAttribute("user") User user,
    BindingResult result, Model model){
       // public String get(final ModelMap model) {
            System.out.println("inside here get returning model ..");
             List<User> users = userService.getAll();
              User userObj= null;
             // Attach users to the Model
             //model.addAttribute("users", users);
            Iterator<User> iterate= users.iterator();
            while(iterate.hasNext()) {
                userObj=iterate.next();
                if (userObj.getUserId().equals("dhirenjoshi")){
                    break;
                }

            }

      model.addAttribute("user", userObj);
       return "home";
        }

        @RequestMapping( method = RequestMethod.POST)
        //final User user, final BindingResult result,
        public String processSubmit(@ModelAttribute("user") User user,
    BindingResult result, Model model){
        //public String post( Model mv) {

           String test=" inside here";

            return "success";
        }

这是HomePageController,它是Web应用程序的入口点。

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * Handles requests for the application home page.
 */
@Controller
public class HomeController {

    private static final Logger logger = LoggerFactory.getLogger(HomeController.class);

    /**
     * Simply selects the home view to render by returning its name.
     */
    @RequestMapping(value="/", method=RequestMethod.GET)
    public String home(Locale locale, Model model) {
        logger.info("Welcome home! the client locale is "+ locale.toString());

        Date date = new Date();
        DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);

        String formattedDate = dateFormat.format(date);

        model.addAttribute("serverTime", formattedDate );
        model.addAttribute("today", formattedDate );
        return "home";
    }


}

由于 Dhiren

1 个答案:

答案 0 :(得分:3)

我想我已经找到了问题。

检查您的hibernate-cfg.xml是否有一个属性 hbm2ddl.auto 如果设置为创建将其更改为更新

<property name="hbm2ddl.auto">update</property>

详细了解这些设置here