Я пытаюсь запустить спящий режим обновления. Вместо обновления существующих записей он добавляет новые записи, оставляя индекс старых записей пустым. Я считаю, что он продолжает использовать 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);