Исключение класса Spring Boot в методе PostConstruct

Я запускаю приложение Spring Boot с методом PostConstruct для заполнения POJO перед инициализацией приложения. Это делается для того, чтобы база данных не подвергалась множественным запросам на получение содержимого POJO после ее запуска.

Я могу извлечь данные из базы данных Oracle через запрос Hibernate и сохранить их в своем POJO. Проблема возникает, когда я пытаюсь получить доступ к сохраненным данным. Набор данных содержит список объектов, содержащих строки и числа. Просто попытка напечатать описание объекта в верхней части списка вызывает исключение приведения класса. Как мне смягчить эту проблему?

@Autowired
private TaskDescrBean taskBean;
@PostConstruct
public void loadDescriptions() {

TaskDataLoader taskData = new TaskDataLoader(taskBean.acquireDataSourceParams());
List<TaskDescription> taskList = tdf.getTaskDescription();
taskBean.setTaskDescriptionList(taskList);
System.out.println("Task description size: " + taskBean.getTaskDescriptionList().get(0).getTaskDescription());
}

Мой класс POJO:

@Component
public class TaskDescrBean implements ApplicationContextAware {

@Resource
private Environment environment;
protected List<TaskDescription> taskDescriptionList;

public Properties acquireDataSourceParams() {

    Properties dataSource = new Properties();
    dataSource.setProperty("hibernate.connection.driver_class", environment.getProperty("spring.datasource.driver-class-name"));
    dataSource.setProperty("hibernate.connection.url", environment.getProperty("spring.datasource.url"));
    dataSource.setProperty("hibernate.connection.username", environment.getProperty("spring.datasource.username"));
    dataSource.setProperty("hibernate.connection.password", environment.getProperty("spring.datasource.password"));
    return dataSource;
}


public List<TaskDescription> getTaskDescriptionList() {
    return taskDescriptionList;
}


public void setTaskDescriptionList(List<TaskDescription> taskDescriptionList) {
    this.taskDescriptionList = taskDescriptionList;
}

public ApplicationContext getApplicationContext() {
    return applicationContext;
}


public void setApplicationContext(ApplicationContext applicationContext) {
    this.applicationContext = applicationContext;
}
}

Мой класс ДАО:

public class TaskDataLoader {

private Session session;
private SessionFactory sessionFactory;

public TaskDataLoader(Properties connectionProperties) {

    Configuration config = new Configuration().setProperties(connectionProperties);
    config.addAnnotatedClass(TaskDescription.class);
    sessionFactory = config.buildSessionFactory();
}

@SuppressWarnings("unchecked")
public List<TaskDescription> getTaskDescription() {

    List<TaskDescription> taskList = null;
    session = sessionFactory.openSession();
    try {

        String description = "from TaskDescription des";
        Query taskDescriptionQuery = session.createQuery(description);
        taskList = taskDescriptionQuery.list();
        System.out.println("Task description fetched. " + taskList.getClass());
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        session.close();
    }
    return taskList;
}

Сущность описания задачи:

@Entity
@Table(name="TASK_DESCRIPTION")

@JsonIgnoreProperties
public class TaskDescription implements Serializable {
    private static final long serialVersionUID = 1L;

@Id
@Column(name="TASK_DESCRIPTION_ID")
private Long taskDescriptionId;

@Column(name="TASK_DESCRIPTION")
private String taskDescription;

public Long getTaskDescriptionId() {
    return taskDescriptionId;
}

public void setTaskDescriptionId(Long taskDescriptionId) {
    this.taskDescriptionId = taskDescriptionId;
}    

public String getTaskDescription() {
    return taskDescription;
}

public void setTaskDescription(String taskDescription) {
    this.taskDescription = taskDescription;
}

}

Трассировки стека


person Mano    schedule 05.02.2018    source источник
comment
Пожалуйста, поделитесь всей трассировкой стека.   -  person davidxxx    schedule 05.02.2018


Ответы (1)


Вместо того, чтобы отправлять список в операторе возврата, я преобразовал его в объект JSON и отправил его строковое представление, которое я сопоставил обратно с объектом после его преобразования с помощью mapper.readValue().

person Mano    schedule 05.02.2018