我正在使用Spring和Hibernate。
NamedQuery:
@NamedQueries({ @NamedQuery(name = "Contact.findByUserId", query = "select cntct.mobileNo,cntct.homeTown,cntct.city,cntct.state,cntct.country,mbr.firstName,mbr.lastName,usr.userName from Contact cntct,Member mbr,User usr where cntct.user = :user")})
@Entity
@Table(name = "Contact")
public class Contact {
@Id
@Column(name="CONTACT_ID")
@GeneratedValue(strategy=GenerationType.AUTO)
private long contactId;
@Column(name="MOBILE_NUMBER", length=30)
private long mobileNo;
@Column(name="HOME_TOWN", length=30)
private String homeTown;
@Column(name="CITY_NAME", length=30)
private String city;
@Column(name="STATE_NAME", length=30)
private String state;
@Column(name="COUNTRY_NAME", length=30)
private String country;
以下用于触发查询和获取数据的代码。
public ContactView getContact(long userId) {
Session session=sessionFactory.openSession();
Query query=session.getNamedQuery("Contact.findByUserId");
query.setLong("user", userId);
List<?> list=query.list();
session.close();
return null;
}
我面临的问题是,如何将列表的数据映射到任何自定义Bean?
或者还有其他可行的手段吗?
谢谢!
答案 0 :(得分:3)
query.list();
以List形式返回查询结果。如果查询每行包含多个结果,则结果将在Object []的实例中返回。
来源:http://docs.jboss.org/hibernate/orm/3.2/api/org/hibernate/Query.html#list()
因此,我们需要以下列方式修改我们的代码以获得预期的结果:
List<Object[]> list=query.list();
for(i=0;i<list.size();i++){
Object obj[]=list.get(i);
for(Object obj1:obj){
//set your beans by using appropriate setters
}
}
其他选择:
请在hibernate中使用 ResultTransformer 将结果集(复杂的选择查询)映射到单个实体类。
ProdEntity prod = (ProdEntity)session.createQuery("select e.productId as pId,e.price as pPrice from Product e where e.productId = :productId").setParameter("productId", 103).setResultTransformer(Transformers.aliasToBean(ProdEntity.class)).uniqueResult();
答案 1 :(得分:1)