2

私の Web アプリケーションでは、Hibernate と struts2 を使用しています。データを XML として送り返す必要があったため、SimpleXML フレームワークを追加しました。

私はまだテスト段階です。そこで、Hibernate によって生成された POJO クラスでもある Store クラスに注釈を追加しました。

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;
} 
}

また、hibernate を使用してデータベースからデータをロードし、ログ ファイルに 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 に答える