Java 如何使用Strius2和Hibernate3实体映射关系从代码中获取名称以显示在JSP上的记录上
我有两个表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 目前我正在使用: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\
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>
| <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!!!