hibernate持久集未在一对多映射中填充

hibernate持久集未在一对多映射中填充,hibernate,hql,one-to-many,Hibernate,Hql,One To Many,我正在尝试使用Spring、Hibernate和JSF创建一个用户管理系统。我创建了自己的Users类,它实现java.io.Serializable,org.springframework.security.core.userdetails.userdetails 和角色类 我的问题是UserLoginDAOImpl类的loadUserByName(字符串名)方法没有加载持久的角色集。 我正在使用Netbeans 7.3 beta IDE,Glassfish server 3+作为web服务器

我正在尝试使用Spring、Hibernate和JSF创建一个用户管理系统。我创建了自己的Users类,它实现java.io.Serializable,org.springframework.security.core.userdetails.userdetails 和角色类

我的问题是UserLoginDAOImpl类的loadUserByName(字符串名)方法没有加载持久的角色集。

我正在使用Netbeans 7.3 beta IDE,Glassfish server 3+作为web服务器

这是调试快照。

以下是hbm查询的调试跟踪:

INFO: Hibernate: select users0_.USERS_ID as USERS1_2_, users0_.USERS_USERNAME as USERS2_2_, users0_.USERS_PASSWORD as USERS3_2_, users0_.USERS_ENABLED as USERS4_2_, users0_.USERS_CREATED_DT as USERS5_2_, users0_.USERS_MODIFIED_DT as USERS6_2_, users0_.USERS_EMAIL as USERS7_2_ from ats.users users0_ where users0_.USERS_USERNAME='user'
INFO: Hibernate: select roleses0_.ROLES_USERNAME as ROLES2_1_, roleses0_.ROLES_ID as ROLES1_1_, roleses0_.ROLES_ID as ROLES1_1_0_, roleses0_.ROLES_USERNAME as ROLES2_1_0_, roleses0_.ROLES_ROLE_NAME as ROLES3_1_0_, roleses0_.ROLES_CREATED_DT as ROLES4_1_0_, roleses0_.ROLES_MODIFIED_DT as ROLES5_1_0_ from ats.roles roleses0_ where roleses0_.ROLES_USERNAME=?
    CREATE TABLE `users` (
  `USERS_ID` int(11) NOT NULL AUTO_INCREMENT,
  `USERS_USERNAME` varchar(45) NOT NULL,
  `USERS_PASSWORD` varchar(255) NOT NULL,
  `USERS_ENABLED` varchar(5) NOT NULL,
  `USERS_CREATED_DT` varchar(45) NOT NULL,
  `USERS_MODIFIED_DT` varchar(45) DEFAULT NULL,
  `USERS_EMAIL` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`USERS_ID`),
  UNIQUE KEY `USERS_USERNAME_UNIQUE` (`USERS_USERNAME`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8$$

    CREATE TABLE `roles` (
  `ROLES_ID` int(11) NOT NULL AUTO_INCREMENT,
  `ROLES_USERNAME` varchar(45) NOT NULL,
  `ROLES_ROLE_NAME` varchar(45) NOT NULL,
  `ROLES_CREATED_DT` varchar(45) NOT NULL,
  `ROLES_MODIFIED_DT` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`ROLES_ID`),
  KEY `FK_ROLES_ID` (`ROLES_USERNAME`),
  CONSTRAINT `FK_ROLES_ID` FOREIGN KEY (`ROLES_USERNAME`) REFERENCES `users` (`USERS_USERNAME`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8$$
 @Override
public Users loadUserByName(String name) {
    if (name != null && !name.equals("")) {
                Session session=hibernateTemplate.getSessionFactory().openSession();
                Transaction transaction=null;
                transaction=session.beginTransaction();
                
                 List<Users> user=session.createQuery("from Users where usersUsername='"+name+"'").list();
            
                
             
       
                 
                   transaction.commit();
                    if (user.size() == 1) {
                 
            
                     return user.get(0);
        } else {
            return null;
        }
    } else {
        return null;
    }
}
用户和角色表架构:

INFO: Hibernate: select users0_.USERS_ID as USERS1_2_, users0_.USERS_USERNAME as USERS2_2_, users0_.USERS_PASSWORD as USERS3_2_, users0_.USERS_ENABLED as USERS4_2_, users0_.USERS_CREATED_DT as USERS5_2_, users0_.USERS_MODIFIED_DT as USERS6_2_, users0_.USERS_EMAIL as USERS7_2_ from ats.users users0_ where users0_.USERS_USERNAME='user'
INFO: Hibernate: select roleses0_.ROLES_USERNAME as ROLES2_1_, roleses0_.ROLES_ID as ROLES1_1_, roleses0_.ROLES_ID as ROLES1_1_0_, roleses0_.ROLES_USERNAME as ROLES2_1_0_, roleses0_.ROLES_ROLE_NAME as ROLES3_1_0_, roleses0_.ROLES_CREATED_DT as ROLES4_1_0_, roleses0_.ROLES_MODIFIED_DT as ROLES5_1_0_ from ats.roles roleses0_ where roleses0_.ROLES_USERNAME=?
    CREATE TABLE `users` (
  `USERS_ID` int(11) NOT NULL AUTO_INCREMENT,
  `USERS_USERNAME` varchar(45) NOT NULL,
  `USERS_PASSWORD` varchar(255) NOT NULL,
  `USERS_ENABLED` varchar(5) NOT NULL,
  `USERS_CREATED_DT` varchar(45) NOT NULL,
  `USERS_MODIFIED_DT` varchar(45) DEFAULT NULL,
  `USERS_EMAIL` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`USERS_ID`),
  UNIQUE KEY `USERS_USERNAME_UNIQUE` (`USERS_USERNAME`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8$$

    CREATE TABLE `roles` (
  `ROLES_ID` int(11) NOT NULL AUTO_INCREMENT,
  `ROLES_USERNAME` varchar(45) NOT NULL,
  `ROLES_ROLE_NAME` varchar(45) NOT NULL,
  `ROLES_CREATED_DT` varchar(45) NOT NULL,
  `ROLES_MODIFIED_DT` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`ROLES_ID`),
  KEY `FK_ROLES_ID` (`ROLES_USERNAME`),
  CONSTRAINT `FK_ROLES_ID` FOREIGN KEY (`ROLES_USERNAME`) REFERENCES `users` (`USERS_USERNAME`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8$$
 @Override
public Users loadUserByName(String name) {
    if (name != null && !name.equals("")) {
                Session session=hibernateTemplate.getSessionFactory().openSession();
                Transaction transaction=null;
                transaction=session.beginTransaction();
                
                 List<Users> user=session.createQuery("from Users where usersUsername='"+name+"'").list();
            
                
             
       
                 
                   transaction.commit();
                    if (user.size() == 1) {
                 
            
                     return user.get(0);
        } else {
            return null;
        }
    } else {
        return null;
    }
}
这是我的DAOImpl类方法:

INFO: Hibernate: select users0_.USERS_ID as USERS1_2_, users0_.USERS_USERNAME as USERS2_2_, users0_.USERS_PASSWORD as USERS3_2_, users0_.USERS_ENABLED as USERS4_2_, users0_.USERS_CREATED_DT as USERS5_2_, users0_.USERS_MODIFIED_DT as USERS6_2_, users0_.USERS_EMAIL as USERS7_2_ from ats.users users0_ where users0_.USERS_USERNAME='user'
INFO: Hibernate: select roleses0_.ROLES_USERNAME as ROLES2_1_, roleses0_.ROLES_ID as ROLES1_1_, roleses0_.ROLES_ID as ROLES1_1_0_, roleses0_.ROLES_USERNAME as ROLES2_1_0_, roleses0_.ROLES_ROLE_NAME as ROLES3_1_0_, roleses0_.ROLES_CREATED_DT as ROLES4_1_0_, roleses0_.ROLES_MODIFIED_DT as ROLES5_1_0_ from ats.roles roleses0_ where roleses0_.ROLES_USERNAME=?
    CREATE TABLE `users` (
  `USERS_ID` int(11) NOT NULL AUTO_INCREMENT,
  `USERS_USERNAME` varchar(45) NOT NULL,
  `USERS_PASSWORD` varchar(255) NOT NULL,
  `USERS_ENABLED` varchar(5) NOT NULL,
  `USERS_CREATED_DT` varchar(45) NOT NULL,
  `USERS_MODIFIED_DT` varchar(45) DEFAULT NULL,
  `USERS_EMAIL` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`USERS_ID`),
  UNIQUE KEY `USERS_USERNAME_UNIQUE` (`USERS_USERNAME`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8$$

    CREATE TABLE `roles` (
  `ROLES_ID` int(11) NOT NULL AUTO_INCREMENT,
  `ROLES_USERNAME` varchar(45) NOT NULL,
  `ROLES_ROLE_NAME` varchar(45) NOT NULL,
  `ROLES_CREATED_DT` varchar(45) NOT NULL,
  `ROLES_MODIFIED_DT` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`ROLES_ID`),
  KEY `FK_ROLES_ID` (`ROLES_USERNAME`),
  CONSTRAINT `FK_ROLES_ID` FOREIGN KEY (`ROLES_USERNAME`) REFERENCES `users` (`USERS_USERNAME`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8$$
 @Override
public Users loadUserByName(String name) {
    if (name != null && !name.equals("")) {
                Session session=hibernateTemplate.getSessionFactory().openSession();
                Transaction transaction=null;
                transaction=session.beginTransaction();
                
                 List<Users> user=session.createQuery("from Users where usersUsername='"+name+"'").list();
            
                
             
       
                 
                   transaction.commit();
                    if (user.size() == 1) {
                 
            
                     return user.get(0);
        } else {
            return null;
        }
    } else {
        return null;
    }
}
请告诉我如何解决此问题。

在Dao类中,请尝试:

 List<Users> user=
     session.createQuery("from Users u where u.usersUsername= :username")
    .setParameter("username", name).list();
列出用户=
createQuery(“来自用户u,其中u.usersUsername=:用户名”)
.setParameter(“用户名”,名称).list();
我已经试过了:
List user=session.createQuery(“从用户身份u,其中u.usersUsername=:username”).setParameter(“username”,name).List()但设置角色具有空值。