2

在我的 Web 应用程序中,我使用 Hibernate 和 struts2。因为我需要以 XML 形式发回数据,所以我添加了 SimpleXML 框架。

我还处于测试阶段。所以我在我的 Store 类中添加了注释,它也是由 Hibernate 生成的 POJO 类。

我的 xml 中没有数据。这是我得到的:

<store>
  <storeID>0</storeID>
</store>

我期待这个 XML 代替:

<store>
  <storeID>2</storeID>
  <storeName>JC Penny</storeName>
</store>

Store 类的代码如下所示:

 /**
 * Store generated by hbm2java
 */
 @Root(name="store")
 @Entity
@Table(name="store"
    ,catalog="shopperdb"
)
public class Store  implements java.io.Serializable {

    @Element(name="storeID")
     private int id;

     @Element(name="storeName" , required=false)
     private String name;
     @Id 

@Column(name="id", unique=true, nullable=false)
public int getId() {
    return this.id;
}

public void setId(int id) {
    this.id = id;
}

@Column(name="name", length=45)
public String getName() {
    return this.name;
}

public void setName(String name) {
    this.name = name;
} 
}

这也是我的操作中的代码,它使用休眠从数据库加载数据并将 XML 生成到我的日志文件:

     _sess = HibernateUtil.getSessionFactory().getCurrentSession();

     if (!_sess.isOpen()) _sess = HibernateUtil.getSessionFactory().openSession();

     _tx = _sess.beginTransaction();

     Store tempStore = (Store) _sess.load(Store.class, 2);

     Serializer serializer = new Persister();

     serializer.write(tempStore, System.out);

     _tx.commit();

顺便说一句,我从数据库中获取了正确的数据,因为我有一些从这篇文章中获取的打印语句。

非常感谢您的帮助,萨尔。

4

1 回答 1

1

我修好了它!似乎在使用 Hibernate 时, LOAD 方法返回的对象(不知何故)与查询 LIST 方法返回的对象不同。去搞清楚!

所以我替换了以下行:

Store tempStore = (Store) _sess.load(Store.class, 2); 

有了这个:

  Store tempStore = (Store)_sess.createQuery("from Store s where s.id=:sid").setInteger("sid", 2).uniqueResult(); 

我不确定为什么。我也不确定任何性能后果

于 2012-05-07T10:16:54.917 回答