hibernate持久集未在一对多映射中填充
我正在尝试使用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查询的调试跟踪: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服务器
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()代码>但设置角色具有空值。