3

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

我的问题是 UserLoginDAOImpl 类的方法 loadUserByName(String name) 没有加载持久的角色集。

我正在使用 Netbeans 7.3 beta IDE、Glassfish 服务器 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$$

这是我的 DAOImpl 类方法:

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

用户.hbl.xml

<hibernate-mapping>
<class name="com.ats.customer.model.Users" table="users" catalog="ats">
    <id name="usersId" type="java.lang.Integer">
        <column name="USERS_ID" />
        <generator class="native" />
    </id>
    <property name="usersUsername" type="string">
        <column name="USERS_USERNAME" length="45" not-null="true" unique="true" />
    </property>
    <property name="usersPassword" type="string">
        <column name="USERS_PASSWORD" not-null="true" />
    </property>
    <property name="usersEnabled" type="string">
        <column name="USERS_ENABLED" length="5" not-null="true" />
    </property>
    <property name="usersCreatedDt" type="string">
        <column name="USERS_CREATED_DT" length="45" not-null="true" />
    </property>
    <property name="usersModifiedDt" type="string">
        <column name="USERS_MODIFIED_DT" length="45" />
    </property>
    <property name="usersEmail" type="string">
        <column name="USERS_EMAIL" length="50" />
    </property>
    <set name="roleses" table="roles" inverse="true" lazy="false" fetch="select">
        <key>
            <column name="ROLES_USERNAME" not-null="true" />
        </key>
        <one-to-many class="com.ats.customer.model.Roles" />
    </set>
</class>
  <sql-query name="getUserDetailsByUserNameProc">
<return alias="users" class="com.ats.customer.model.Users"/>
<![CDATA[CALL getUserDetailsByUserName(:username)]]>
</sql-query>

角色.hbl.xml

<hibernate-mapping>
<class name="com.ats.customer.model.Roles" table="roles" catalog="ats">
    <id name="rolesId" type="java.lang.Integer">
        <column name="ROLES_ID" />
        <generator class="native" />
    </id>
    <many-to-one name="users" class="com.ats.customer.model.Users"  fetch="select">
        <column name="ROLES_USERNAME" not-null="true" />
    </many-to-one>
    <property name="rolesRoleName" type="string">
        <column name="ROLES_ROLE_NAME" length="45" not-null="true" />
    </property>
    <property name="rolesCreatedDt" type="string">
        <column name="ROLES_CREATED_DT" length="45" not-null="true" />
    </property>
    <property name="rolesModifiedDt" type="string">
        <column name="ROLES_MODIFIED_DT" length="45" />
    </property>
</class>

用户类:Users.java

public class Users  implements java.io.Serializable,org.springframework.security.core.userdetails.UserDetails {


     private Integer usersId;
     private String usersUsername;
     private String usersPassword;
     private String usersEnabled;
     private String usersCreatedDt;
     private String usersModifiedDt;
     private String usersEmail;
     private Set<Roles> roleses = new HashSet();
     //private GrantedAuthority[] authorities = null;

    public Users() {
    }

    
    public Users(String usersUsername, String usersPassword, String usersEnabled, String usersCreatedDt) {
        this.usersUsername = usersUsername;
        this.usersPassword = usersPassword;
        this.usersEnabled = usersEnabled;
        this.usersCreatedDt = usersCreatedDt;
    }
    public Users(String usersUsername, String usersPassword, String usersEnabled, String usersCreatedDt, String usersModifiedDt, String usersEmail, Set<Roles> roleses) {
       this.usersUsername = usersUsername;
       this.usersPassword = usersPassword;
       this.usersEnabled = usersEnabled;
       this.usersCreatedDt = usersCreatedDt;
       this.usersModifiedDt = usersModifiedDt;
       this.usersEmail = usersEmail;
       this.roleses = roleses;
    }
   
    public Integer getUsersId() {
        return this.usersId;
    }
    
    public void setUsersId(Integer usersId) {
        this.usersId = usersId;
    }
    public String getUsersUsername() {
        return this.usersUsername;
    }
    
    public void setUsersUsername(String usersUsername) {
        this.usersUsername = usersUsername;
    }
    public String getUsersPassword() {
        return this.usersPassword;
    }
    
    public void setUsersPassword(String usersPassword) {
        this.usersPassword = usersPassword;
    }
    public String getUsersEnabled() {
        return this.usersEnabled;
    }
    
    public void setUsersEnabled(String usersEnabled) {
        this.usersEnabled = usersEnabled;
    }
    public String getUsersCreatedDt() {
        return this.usersCreatedDt;
    }
    
    public void setUsersCreatedDt(String usersCreatedDt) {
        this.usersCreatedDt = usersCreatedDt;
    }
    public String getUsersModifiedDt() {
        return this.usersModifiedDt;
    }
    
    public void setUsersModifiedDt(String usersModifiedDt) {
        this.usersModifiedDt = usersModifiedDt;
    }
    public String getUsersEmail() {
        return this.usersEmail;
    }
    
    public void setUsersEmail(String usersEmail) {
        this.usersEmail = usersEmail;
    }
    public Set<Roles> getRoleses() {
        return this.roleses;
    }
    
    public void setRoleses(Set<Roles> roleses) {
        this.roleses = roleses;
    }

    @Override
    public String getPassword() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public String getUsername() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public boolean isAccountNonExpired() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public boolean isAccountNonLocked() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public boolean isCredentialsNonExpired() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public boolean isEnabled() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
}

角色类:Roles.java

public class Roles  implements java.io.Serializable {


     private Integer rolesId;
     private Users users;
     private String rolesRoleName;
     private String rolesCreatedDt;
     private String rolesModifiedDt;

    public Roles() {
    }

    
    public Roles(Users users, String rolesRoleName, String rolesCreatedDt) {
        this.users = users;
        this.rolesRoleName = rolesRoleName;
        this.rolesCreatedDt = rolesCreatedDt;
    }
    public Roles(Users users, String rolesRoleName, String rolesCreatedDt, String rolesModifiedDt) {
       this.users = users;
       this.rolesRoleName = rolesRoleName;
       this.rolesCreatedDt = rolesCreatedDt;
       this.rolesModifiedDt = rolesModifiedDt;
    }
   
    public Integer getRolesId() {
        return this.rolesId;
    }
    
    public void setRolesId(Integer rolesId) {
        this.rolesId = rolesId;
    }
    public Users getUsers() {
        return this.users;
    }
    
    public void setUsers(Users users) {
        this.users = users;
    }
    public String getRolesRoleName() {
        return this.rolesRoleName;
    }
    
    public void setRolesRoleName(String rolesRoleName) {
        this.rolesRoleName = rolesRoleName;
    }
    public String getRolesCreatedDt() {
        return this.rolesCreatedDt;
    }
    
    public void setRolesCreatedDt(String rolesCreatedDt) {
        this.rolesCreatedDt = rolesCreatedDt;
    }
    public String getRolesModifiedDt() {
        return this.rolesModifiedDt;
    }
    
    public void setRolesModifiedDt(String rolesModifiedDt) {
        this.rolesModifiedDt = rolesModifiedDt;
    }
}

请告诉我如何解决这个问题。

4

1 回答 1

1

在 Dao 类中尝试:

 List<Users> user=
     session.createQuery("from Users u where u.usersUsername= :username")
    .setParameter("username", name).list();
于 2013-01-31T10:41:55.280 回答