2012-05-06 4 views
2

В моем веб-приложении я использую Hibernate и struts2. Поскольку мне нужно было отправить данные в формате XML, я добавил среду SimpleXML в микс.SimpleXML & hibernate не играют хорошо?

Я все еще на стадии тестирования. Поэтому я добавил аннотацию к моему классу Store, который также является классом POJO, который был сгенерирован Hibernate.

Я не получаю данных в своем xml. Вот что я получаю:

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

Я ожидал этого XML вместо:

<store> 
    <storeID>2</storeID> 
    <storeName>JC Penny</storeName> 
</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(); 

BTW, я получаю правильные данные из базы данных, потому что у меня были некоторые заявления печати, которые я взял с этой должности.

Ваша помощь очень приветствуется, Сал.

ответ

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(); 

Я не знаю, почему. Я также не уверен в каких-либо результатах работы

Смежные вопросы