Обновление в спящем режиме POJO со списком, оно портится с ArrayList - PullRequest
0 голосов
/ 20 апреля 2019

Я пытаюсь запустить спящий режим обновления. Вместо обновления существующих записей он добавляет новые записи, оставляя индекс старых записей пустым. Я считаю, что он продолжает использовать ArrayList вместо List. Как я могу сохранить POJO, используя List?

Это мой POJO

public class Event implements Serializable{
private static final long serialVersionUID = 1L;
private long oid;
private String address;
private String date;
private List<Fight> fights;
public void setFights(List<Fight> _fights)
{
    this.fights=_fights;
}
public List<Fight> getFights()
{
    return this.fights;
}

public void copy(Event _evt)
{
    this.address=_evt.getAddress();
    this.date=_evt.getDate();
    //this.fights=(List<Fight>)_evt.getFights();
    this.setFights(_evt.getFights());
}
}

hbm.xml

  <class name="Event" table="event">
    <id name="oid" type="long" column="oid">
        <generator class="increment">
            <param name="initial_value">1</param>
        </generator>
   </id>
   <property name="address">
       <column name="address"/>
   </property>
   <property name="date">
        <column name="date"/>   
   </property>
   <list name="fights" cascade="all">  
          <key column="eventOid"></key>  
          <index column="type"></index>  
          <one-to-many class="Fight"/>  
   </list>  
</class>

GetEvtByDateAddress

    public Event getEvtByDateAddress(String _date, String _address)
{
    try
    {
        if(!session.isOpen())
        {
            session = HibernateUtil.getSessionFactory().openSession();
        }
        session.beginTransaction();
        Criteria criteria = session.createCriteria(Event.class);
        criteria.add(Restrictions.eq("date", _date));
        criteria.add(Restrictions.eq("address", _address));
        Event evt = (Event)criteria.uniqueResult();
        if (evt==null)
        {
            //The event does not exist
            return null;
        }
        else
        {
            return evt;
        }
    }
    catch(Exception e)
    {
        //System.out.println(e.toString())
        return null;
    }
}

Обновить код: От отладчика, _event.fights - это ArrayList, tmpEvent.fights, извлекаемый из базы данных, - это PersistenceList. После tmpEvent.copy (_event) tmpEvent.fights становится ArrayList. Это вызывает проблему. Как мне сохранить tmpEvent.fights как список?

public int updateEvent(Event _event)
{
    try
    {
        if(!session.isOpen())
        {
            session = HibernateUtil.getSessionFactory().openSession();
        }
        Event tmpEvent=new Event();
        if((tmpEvent=this.getEvtByDateAddress(_event.getDate(), _event.getAddress()))!=null)
        {
            tmpEvent.copy(_event);
            Transaction tx =session.beginTransaction();
            session.update(tmpEvent);
            session.flush();
            tx.commit();
            session.close();
            //return success
            return 0;
        }
        else
        {
            //doesnt exist
        }
    }
    catch(Exception e){
        return -254;
    }
}

Главная

    String date = "11 Jan 2018";
    List<Fight> fights=new ArrayList<Fight>();
    Fight m1=new Fight(1,2);
    Fight m2=new Fight(3,4);
    Fight m3=new Fight(5,6);
    Fight m4=new Fight(7,8);
    fights.add(m1);
    fights.add(m2);
    fights.add(m3);
    fights.add(m4);
    Event event = new Event("address string", date, fights);

    EventDAO eventdao = new EventDAO();
    eventdao.updateEvent(event);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...