Использование источника данных Hibernate с JFreeCharts - PullRequest
2 голосов
/ 06 января 2012

У меня есть веб-приложение на Java, которое позволяет пользователю выбирать группы полей (с фильтрами, агрегациями и т. Д.), Которые затем будут использоваться для создания диаграмм / графиков.

База данных, лежащая в основе приложения, является стандартной базой данных PostGreSQL 9.04, но мы используем Hibernate ORM для доступа к данным.

Код, который я сейчас имею, создает HQL Query (Hibernate Query Language) на основе выбора пользователей из веб-интерфейса. Что мне действительно нужно, так это какой-то способ использовать этот запрос для создания набора данных, который JFreeCharts может использовать для построения диаграммы.

Есть ли примеры интеграции JFreeChart и Hibernate? Исследовав это сам, я не могу найти ничего, кроме этого поста на форуме Hibernate, в котором говорится, что это можно сделать, но не давая подробностей о том, как:

https://forum.hibernate.org/viewtopic.php?f=6&t=997556

Подведем итог: У меня есть HQL-запрос, я хочу использовать его для создания источника данных, который JFreeCharts может использовать для создания круговых диаграмм, столбцов, столбцов и линейных диаграмм.

Любая помощь будет высоко ценится.

Ответы [ 2 ]

1 голос
/ 06 января 2012

При отсутствии существующей реализации вас может вдохновить один из существующих вариантов модели данных, представленный в org.jfree.data.jdbc.

0 голосов
/ 13 июля 2018

Я что-то пробовал. Вот код для моего класса сущности:

package com.gxet4n.jfreechart;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="mobile_tbl")
public class Mobile_tbl {

   @Id
   private int id;

   @Column(name="mobile_brand")
   private String mobile_brand;

   @Column(name="unit_sale")
   private int unit_sale;

   // getters and setters

}

Тогда вот код для моего основного класса:

package com.gxet4n.jfreechart;

import java.io.File;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.Query;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtils;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;

public class PieChart_HQL {

    public static void main( String[ ] args )throws Exception {

    DefaultPieDataset dataset = new DefaultPieDataset( );
    DefaultCategoryDataset dataset2 = new DefaultCategoryDataset();
    try {

        SessionFactory sessionFactory = new Configuration().configure().addAnnotatedClass(Mobile_tbl.class).buildSessionFactory();
        Session session = sessionFactory.openSession();
        session.beginTransaction();

        Query<?> query = session.createQuery("FROM Mobile_tbl");
        List<Mobile_tbl> mobiles = (List<Mobile_tbl>)query.list();

        session.close();


        for (Mobile_tbl m : mobiles) {
            dataset.setValue(m.getMobile_brand(), m.getUnit_sale());
        }

        for (Mobile_tbl m : mobiles) {
            dataset2.setValue(m.getUnit_sale(),m.getMobile_brand(),"");
        }

    } catch (Exception e) {
         System.out.println(e.getMessage()); 
    }

      JFreeChart chart = ChartFactory.createPieChart(
                 "Mobile Sales",   // chart title           
                 dataset,          // data           
                 true,             // include legend          
                 true,           
                 false );
      JFreeChart barChart = ChartFactory.createBarChart(
                 "Mobiles Sales",           
                 "Mobile Brand",            
                 "Unit Sale",            
                 dataset2,          
                 PlotOrientation.VERTICAL,           
                 true, true, false);

              int width = 560;    /* Width of the image */
              int height = 370;   /* Height of the image */ 
              File pieChart = new File( "Pie_Chart_HQL.png" );
              ChartUtils.saveChartAsPNG(pieChart, chart, width, height);
              File barchart = new File( "Bar_Chart_HQL.png" );
              ChartUtils.saveChartAsPNG(barchart, barChart, width, height);
    }
}

Наконец, есть результаты: Bar chart from HQL query Pie chart from HQL query

Я использовал hibernate core 5.2.12.Final и jfreechart 1.5.0

...