Java 如何使用Strius2和Hibernate3实体映射关系从代码中获取名称以显示在JSP上的记录上

Java 如何使用Strius2和Hibernate3实体映射关系从代码中获取名称以显示在JSP上的记录上,java,jsp,struts2,hibernate3,Java,Jsp,Struts2,Hibernate3,我有两个表GroupParent和typechild,它们由GroupId映射。这是通过Hibernate@OneToMany映射完成的 我的问题是,当我在JSP中显示类型表的记录时,它显示的是TypeName&GroupId,因为我使用TypeEntity类来实现这一点,但我希望显示的是TypeName和GroupName,而不是GroupId 简单到我想要的程度。比如:从类型A、组B中选择A.TYPE\u NAME、B.GROUP\u NAME,其中A.GROUP\u ID=B.GROUP\

我有两个表GroupParent和typechild,它们由GroupId映射。这是通过Hibernate@OneToMany映射完成的

我的问题是,当我在JSP中显示类型表的记录时,它显示的是TypeName&GroupId,因为我使用TypeEntity类来实现这一点,但我希望显示的是TypeName和GroupName,而不是GroupId

简单到我想要的程度。比如:从类型A、组B中选择A.TYPE\u NAME、B.GROUP\u NAME,其中A.GROUP\u ID=B.GROUP\u ID

目前我正在使用:

 List<UserTypeEntity> typeList = criteria.add(Restrictions.eq("userActive", 
"Y").ignoreCase()).addOrder(Property.forName("userTypeName").asc()).list();
和我的GroupEntity类:

@Entity
@Table(name="USER_TYPE_MSTR")
public class UserTypeEntity implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name="USER_TYPE_ID")
    private int userTypeId;

    @Column(name="USER_TYPE")
    private String userTypeName;

    @Column(name="USER_TYPE_DESC")
    private String userTypeDesc;

//  @ManyToOne
    @Column(name="USER_GRP_ID")
    private int userGroupId;

          ..... Setter Getters....
}
@Entity
@Table(name="USER_GROUP_MSTR")
public class UserGroupEntity implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name="USER_GRP_ID")
    private int userGroupId;

    @Column(name="USER_GRP")
    private String userGroupName;

    @Column(name="USER_GRP_DESC")
    private String userGroupDesc;


    @Column(name="ACTIVE")
    private String userActive;

    @OneToMany(cascade=CascadeType.ALL)
    @JoinTable( name                ="USER_GROUP_TYPE", 
                joinColumns         = {@JoinColumn(name="GROUP_ID", referencedColumnName="USER_GRP_ID")},
                inverseJoinColumns  = {@JoinColumn(name="TYPE_ID",  referencedColumnName="USER_TYPE_ID")}
    )
    private Set<UserTypeEntity> userTypeEntities;

    /**
     * @return the userTypeEntities
     */
    public Set<UserTypeEntity> getUserTypeEntities() {
        return userTypeEntities;
    }

    /**
     * @param userTypeEntities the userTypeEntities to set
     */
    public void setUserTypeEntities(Set<UserTypeEntity> userTypeEntities) {
        this.userTypeEntities = userTypeEntities;
    }
          .... Getters & Setters ....
}
我的刀类:

public class UserTypeDAO {
private List<UserTypeEntity> typeList = null;
private Criteria criteria;
@SuppressWarnings("unchecked")
    public List<UserTypeEntity> getUserTypes() throws HibernateException{
        log.info("...In UserTypeDAO.getUserTypes...");
        try {
            criteria = ConnectionFactory.getSessionfactory().openSession().createCriteria(UserTypeEntity.class);
            typeList = criteria.add(Restrictions.eq("userActive", "Y").ignoreCase()).addOrder(Property.forName("userTypeName").asc()).list();
        } catch (HibernateException e) {
            e.printStackTrace();
        }
        return typeList;
    }
}
我的行动课:

public class UserTypeAction extends ActionSupport implements Preparable{
private List<UserTypeEntity> typeList;
@SkipValidation
    public String userTypeView() throws Exception{
        try {
            typeList = (List<UserTypeEntity>)UserTypeController.getUserTypes();
            if(typeList.size() > 0){
                setTypeList(typeList);              

                result = SUCCESS;
            }else {
                result = SUCCESS;
            }
        } catch (Exception e) {
            result = ERROR;
            e.printStackTrace();
        }
        return result;
    }
}
和我的JSP:

<s:if test="%{typeList.size() != 0}">
                <s:iterator value="typeList" var="type">
                    <tr>
                        <td align="left"><s:property value="userTypeName"/></td>
                        <td align="left"><s:property value="userTypeDesc"/></td>
                        <td align="left"><s:property value="userGroupId"/></td>
                        <td align="center"><s:date name="userCreatedDate" format="dd-MMM-yyyy" /></td>
                        <td align="center"><s:date name="userModifiedDate" format="dd-MMM-yyyy" /></td>
                        <td align="center"><b><a href="#" onclick="javascript:userTypeEdit('edit','${userTypeId}','${userTypeName}','${userTypeDesc}','${userGroupId}','${userCreatedDate}','${userModifiedDate}');">Edit</a></b>
                            &nbsp;&nbsp;|&nbsp;&nbsp;<b><a href="#" onclick="javascript:userTypeDelete('userTypeDelete.action?typeId=${userTypeId}');">Delete</a></b>
                        </td>
                    </tr>
                </s:iterator>
            </s:if>
            <s:else>
                <tr>
                    <td colspan="100%"><div style="color:red;">No Results found</div></td>
                </tr>
            </s:else>

我在TypeEntity类中创建了

@ManyToOne
    @JoinColumn(name="USER_GRP_ID")
    private UserGroupEntity userGroupEntity;
在GroupEntity中:

@OneToMany(mappedBy="userGroupEntity")
    private Set<UserTypeEntity> userTypeEntities;
然后在JSP中,我访问了如下内容:

<td align="left"><s:property value="userGroupEntity.userGroupDesc"/></td>

我的问题已经解决了…

显示您的实体、JSP和完整查询。1最好使用视图。。在数据库中创建视图。创建新实体,其表和字段映射将使用视图名称。这将是好的,因为你没有任何更新或插入列表。或者2您可以使用hql或3,而不是只创建Id。您应该在UserTypeEntity中创建UserGroupEntity的对象,以便注释位于错误的位置。然后,您可以使用该对象调用组名的get方法。谢谢Parth,在我得到您的解决方案之前,我已经按照您的第3点解决了问题。。。Thanx!!!