struts代码
package com.haolong.invoicing.struts;import java.util.Iterator;
import java.util.Set;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.MappingDispatchAction;import com.haolong.invoicing.biz.AdminBiz;
import com.haolong.invoicing.biz.AdminBizImpl;
import com.haolong.invoicing.model.Admin;
import com.haolong.invoicing.model.AdminRoles;public class AdminAction extends MappingDispatchAction {
private AdminBiz biz;
public ActionForward login(
ActionMapping mapping,ActionForm form,
HttpServletRequest request,HttpServletResponse response){
String username=request.getParameter("loginname");
String password=request.getParameter("password");
Admin admin=biz.findAdmin(username, password);
if(admin==null){
System.out.print(biz);
return mapping.findForward("fail");
}else{
request.getSession().setAttribute("admin",admin);
Set set=admin.getAdminRoles();
System.out.println(set.size());
Iterator<AdminRoles> it=set.iterator();
while(it.hasNext()){
System.out.println(it.next().getRole()); //出现异常 }
System.out.print(admin.getNames());
return mapping.findForward("success");
}

}
public ActionForward logout(ActionMapping mapping,ActionForm  form,
HttpServletRequest request,HttpServletResponse response){
request.getSession().removeAttribute("admin");
return mapping.findForward("success");

}
public AdminBiz getBiz() {
return biz;
}
public void setBiz(AdminBiz biz) {
this.biz = biz;
}}model代码
Admin.java-----------------------------------------------------------------------------package com.haolong.invoicing.model;import java.io.Serializable;
import java.sql.Date;
import java.util.HashSet;
import java.util.Set;
public class Admin implements Serializable {
private Integer id;
private String names;
private String loginName;
private String loginPassword;
private String phone;
private String email;
private Date enrollDate;
private Set<AdminRoles> adminRoles = new HashSet<AdminRoles>();
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getNames() {
return names;
}
public void setNames(String names) {
this.names = names;
}
public String getLoginName() {
return loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName;
}
public String getLoginPassword() {
return loginPassword;
}
public void setLoginPassword(String loginPassword) {
this.loginPassword = loginPassword;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getEnrollDate() {
return enrollDate;
}
public void setEnrollDate(Date enrollDate) {
this.enrollDate = enrollDate;
}
public Set<AdminRoles> getAdminRoles() {
return adminRoles;
}
public void setAdminRoles(Set<AdminRoles> adminRoles) {
this.adminRoles = adminRoles;
}

}
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping
    SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.haolong.invoicing.model">
  <class name="Admin" table="admins">
   <id name="id">
   <generator class="increment"></generator>
   </id>
  
   <property name="names" />
   <property name="loginName" column="loginname"/>
   <property name="loginPassword" column="loginpassword"/>
   <property name="phone" />
   <property name="email"/>
   <property name="enrollDate" column="enrolldate"/>
  
   <set name="adminRoles" table="adminroles" lazy="false"  inverse="true" cascade="save-update"><!-- 映射集合元素 -->
        <key column="adminid"/><!-- 指定关联的外键 -->
        <one-to-many class="AdminRoles"  /><!-- 用以映射到关联类 -->
     </set>
    
  </class>
</hibernate-mapping>AdminRoles.java--------------------------------------------------------------------------
package com.haolong.invoicing.model;import java.io.Serializable;public class AdminRoles implements Serializable {
private Integer id;
private Admin admin;
private Role role;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Admin getAdmin() {
return admin;
}
public void setAdmin(Admin admin) {
this.admin = admin;
}
public Role getRole() {
return role;
}
public void setRole(Role role) {
this.role = role;
}

}<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping
    SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.haolong.invoicing.model">
<class name="AdminRoles" table="adminroles" >
<id name="id">
<generator  class="increment" />
</id>

<many-to-one class="Admin" column="adminid" name="admin"/>
<many-to-one  class="Role" column="roleid" name="role"/>

</class>
</hibernate-mapping>
Role.java---------------------------------------------------------------------------------
package com.haolong.invoicing.model;import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
public class Role implements Serializable {
private Integer id;
private String names;
private Set<AdminRoles> adminRoles=new HashSet<AdminRoles>();
private Set<RoleRights> roleRights=new HashSet<RoleRights>();
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getNames() {
return names;
}
public void setNames(String names) {
this.names = names;
}
public Set<AdminRoles> getAdminRoles() {
return adminRoles;
}
public void setAdminRoles(Set<AdminRoles> adminRoles) {
this.adminRoles = adminRoles;
}
public Set<RoleRights> getRoleRights() {
return roleRights;
}
public void setRoleRights(Set<RoleRights> roleRights) {
this.roleRights = roleRights;
}
}
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping
    SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.haolong.invoicing.model">
<class name="Role" table="roles">
<id name="id">
<generator class="increment"></generator>
</id> <property name="names" />
<set name="adminRoles" table="adminroles" lazy="false"
cascade="all"  inverse="true">
<key column="roleid" />
<one-to-many class="Admin"  />
</set>
<!-- 
<set name="rights" table="rolerights" lazy="false" cascade="save-update"
>
<key column="roleid" />
<many-to-many class="Right" column="rightid" />
</set>
-->
</class>
</hibernate-mapping>我想获得Admin后直接获取AdminRole 再获取Role ?

解决方案 »

  1.   

    可能主要是这个问题:<set name="adminRoles" table="adminroles" lazy="false"
                cascade="all"  inverse="true">
                <key column="roleid" />
                <one-to-many class="Admin"  />
            </set>应改成:<set name="adminRoles" table="adminroles" lazy="false"
                cascade="all"  inverse="true">
                <key column="roleid" />
                <one-to-many class="AdminRoles"  />
            </set>
      

  2.   

    做的权限啊?
    用MyEclipse自动生成配置配置文件吧
    配置文件不太熟的话 手写容易出错<set name="adminRoles" table="adminroles" lazy="false"
                cascade="all"  inverse="true">
                <key column="roleid" />
                <one-to-many class="AdminRoles"  />
            </set>
     <one-to-many class="AdminRoles"  />class里面应该和name是一致的  LZ的明显是不同的