ArrayList нельзя установить в спящий режим с использованием моделей, сгенерированных Texo

Я создал модель Texo из EMF.

Ниже приведен код

 try{

             Session session = factory.openSession();
              Transaction tx = null;
              Integer employeeID = null;
              try{
                 tx = session.beginTransaction();
                 Country country = new Country();
                 country.setCode("PK");;
                 country.setCountry("PAKISTAN");
                 System.out.println((Integer) session.save(country));
                 //^ HERE THE ERROR COMES

                 tx.commit();
              }catch (HibernateException e) {
                 if (tx!=null) tx.rollback();
                 e.printStackTrace(); 
              }finally {
                 session.close(); 
              }

          }catch (Throwable ex) { 
             System.err.println("Failed to create sessionFactory object." + ex);
             throw new ExceptionInInitializerError(ex); 
          }

Когда я пытаюсь добавить объект страны с местоположением или без него, я получаю сообщение об ошибке

Не удалось создать объект sessionFactory. Java.lang.ClassCastException: java.util.ArrayList не может быть преобразован в java.util.Set

Модель генерируется Texo, имеет список и сгенерированы простые методы получения и установки.

Я проверил эту ссылку , но не нашел ответа.

COUNTRY.java

import java.util.ArrayList;
import java.util.List;
public class Country {
    private int iD = 0;
    private String country = null;
    private String code = null;
    private List<Location> locations = new ArrayList<Location>();
    public int getID() {
        return iD;
    }
    public void setID(int newID) {
        iD = newID;
    }    
    public String getCountry() {
        return country;
    }    
    public void setCountry(String newCountry) {
        country = newCountry;
    }       
    public String getCode() {
        return code;
    }    
    public void setCode(String newCode) {
        code = newCode;
    }       
    public List<Location> getLocations() {
        return locations;
    }   
    public void setLocations(List<Location> newLocations) {
        locations = newLocations;
    }
    @Override
    public String toString() {
        return "Country " + " [iD: " + getID() + "]" + " [country: "
                + getCountry() + "]" + " [code: " + getCode() + "]";
    }
}

person Shan Khan    schedule 17.11.2015    source источник
comment
Можете ли вы опубликовать полную трассировку стека? А твоя деревенская фасоль?   -  person bruno_cw    schedule 17.11.2015
comment
@bruno_cw, пожалуйста, проверьте, я опубликовал подробности.   -  person Shan Khan    schedule 17.11.2015


Ответы (2)


Как обсуждалось в Texo, мне нужно сгенерировать SET вместо LIST в объектах java. для работы с Hibernate.

Поэтому мне пришлось настроить TEXO, чтобы сделать это для всех сущностей.

  1. Создайте модель аннотации.

  2. Найдите объект (местоположения) и добавьте новую аннотацию. перейдите к его свойствам и установите СПИСОК ИСПОЛЬЗОВАНИЯ = ЛОЖЬ.

  3. Сгенерируйте модели texo, и все необходимые объекты будут изменены со списка на набор.

введите описание изображения здесь

person Shan Khan    schedule 17.11.2015

попробуйте изменить Set<Location> sLoc = new HashSet<Location>(locations); на List<Location> sLoc = new ArrayList<Location>(locations);. У вас ur locations как массив и sLoc как Hashset, поэтому он дает исключение при кастинге. Надеюсь, это решит вашу проблему.

person NewBee Developer    schedule 17.11.2015
comment
Я пробовал это изменить. но все же есть исключение. java.util.ArrayList нельзя привести к java.util.Set - person Shan Khan; 17.11.2015
comment
Зачем вам нужен набор результатов? Наборы используются, когда нам нужен один экземпляр объекта, но в списке есть несколько экземпляров. Можете попробовать удалить Set<Location> sLoc = new HashSet<Location>(locations); - person NewBee Developer; 17.11.2015
comment
Я проверил, удалив строчку. Также я попытался удалить местоположение, которое я узнал, даже если я добавляю объект одной страны без какого-либо местоположения, я получаю ту же ошибку - person Shan Khan; 17.11.2015
comment
@NewBeeDeveloper Наборы полезны, когда вам не нужны дубликаты в вашем списке - person bruno_cw; 17.11.2015
comment
@NewBeeDeveloper, я разместил все необходимые детали, такие как класс страны и трассировка стека. - person Shan Khan; 17.11.2015
comment
@ShanKhan после удаления HashSet вы выполнили перестройку? - person bruno_cw; 17.11.2015
comment
@bruno_cw Я проверил и выяснил. Когда я написал приватный набор ‹Location› location = new HashSet ‹Location› (0); Вместо частного списка ‹Location› Location = новый ArrayList ‹Location› (); Это работает, но не могли бы вы сказать мне, как сгенерировать тип набора вместо списка в генерации модели texo? - person Shan Khan; 17.11.2015
comment
В вашем hibernate.cfg.xml есть ли у вас locations сопоставление с <set>? - person bruno_cw; 17.11.2015
comment
@bruno_cw я отправил ответ, а не использовал список в объектах texo, которые я создал, чтобы он работал с гибернацией. Спасибо за ваше время и помощь - person Shan Khan; 17.11.2015
comment
@bruno_cw, конечно, мне нужно подождать 2 дня;) чтобы принять - person Shan Khan; 17.11.2015