【问题标题】:Fetching data from multiple tables in Hibernate and storing the result in a bean从 Hibernate 中的多个表中获取数据并将结果存储在 bean 中
【发布时间】:2014-01-27 06:45:20
【问题描述】:

我正在使用 Spring 和 Hibernate。

命名查询:

@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?

或者还有其他可行的方法吗?

谢谢!!

【问题讨论】:

    标签: java spring hibernate hibernate-mapping


    【解决方案1】:
    query.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();
    

    【讨论】:

      【解决方案2】:
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多