1

我有一个通过休眠连接到数据库的表单。使用此表单,用户可以进入并填写姓名、地址和电子邮件信息等字段。填写完信息后,他们将提交表单。提交后,所有信息将显示在同一页面的数据表中。

我正在使用会话与数据库进行交互。但是,从数据库中填充的数据似乎不正确。

public void somefunction() {

    //The sessionfactory is being configured in another class
    Session s = sessionFactory.openSession(); 
    Transaction tx= null;

    try {
        tx= s.beginTransaction();

        List userInformation = s.createQuery("FROM database1 WHERE PKEY ='"+somevalue+"'").list();

        for(Iterator iterator = userInformation.iterator; iterator.hasNext();){

            //database1 is an entity bean
            database1 x = (database1) iterator.next();

            System.out.print(x.getName());
        }
        tx.commit();
    }
    catch(Exception) {......}
    finally {.....}
}

在用户提交第一个“用户”及其信息后,一切都显示在数据表中。但是,当他们输入第二个“用户”时,数据表上显示的行与第一个用户的信息相同,即使数据不同。我认为代码看起来是正确的,所以我不确定这可能有什么问题。

4

2 回答 2

0

您应该使用主键来获得正确的值。List userInformation = s.createQuery("FROM database1 where yourId='PK'").list();

在您的查询中,它总是会返回第一行。

于 2012-12-19T04:08:08.027 回答
0

找到了解决方案。

session.createQuery("QUERY")我没有使用,而是使用

Criteria cr = session.createCriteria(SomeClass.class)

cr.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);

cr.add(/* add some filters here */);

ScrollableResults sr = cr.scroll(ScrollMode.FORWARD_ONLY);

while(sr.next) {
  someObject so = (someObject) sr.get(0);
  //Do action here
}

这解决了我返回单个结果的问题。

于 2012-12-20T03:52:14.043 回答