2013-04-05 2 views
0

Посмотрел по всему и не смог найти пример этого. Я новичок в Hibernate, но могу создать JSON на одном уровне ... Я могу это сделать, если я использую подготовленных операторов и нескольких массивов, но я не могу заставить его работать с использованием Hibernate и createSQLQuery.Пример спящего режима с множественным отображением от 1 до многих

Мне нужно создать JSON с несколькими 1 до многих уровней, а именно:

{ "успеха": правда, "счетчик": 1, "сообщение": "", "данных": [

{ "Обрабатывается": ложь, "пункт": "372", "Время": "9:00", "Дата": "2013-03-22", "статус" : "inProgress",

"метки": [ "первый", "второй", "третий", «последний» ],

"пункт": [ { "Оценка": "первый", « время»:„6:36:05“,

"детали": [ { "интервал": "1: 31.63" },

{ "Интервал": "1: 32.63" },

{ "интервал": "1: 35.99" },

{ "интервал": "1: 38.63" } ] } ] } ] }

Так может быть несколько деталей в нескольких позициях, и есть несколько меток.

  Query query = session.createSQLQuery(sql) 
        .addScalar("item",Hibernate.STRING) 
        .addScalar("time",Hibernate.STRING) 
        .addScalar("date",Hibernate.STRING) 
       .addScalar("futureProgression",Hibernate.STRING) 
      .setResultTransformer(Transformers.aliasToBean(ABC.class)); 

      resultList = query.list(); 

я могу создать верхний уровень, но я не могу понять, как использовать .addEntity для вставки объектов на этот уровень ...

Кто-нибудь есть пример под рукой?

Спасибо, Джефф

+0

Вы хотели бы преобразовать список объектов, возвращенных спящем запроса в JSON? – sanbhat

+0

Почему вы хотите сущности в SQL? –

ответ

0

Пройтись ссылке ниже, чтобы увидеть, как определить 1-ко-многим с отображениями

http://docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/example-parentchild.html

Если вы будете упорствовать верхний объект уровня с набором ниже уровня, hibernate позаботится о создании записей верхнего уровня и нижнего уровня в таблице.

сеанс.save (parent)

0

прослушать, если вы используете query.createSQLQuery(String sql) при вызове query.list() он вернет список, в котором каждый элемент списка получил Object Array [Строка из базы данных на языке пыльника].

, если вы хотите работать с JSON из спящего режима есть пример:

import org.json.*; 
//.... your imports here : 
// 

public class JSONObjectRetriever{ 

    public JSONObject getDataByID(){ 
     ArrayList<Object[]> resultList = HibernateManager.getItems(); 
     ArrayList<Item> finalJsonList = new ArrayList<Item>(); 

     if(resultList != null) 
     { 
      Iterator<Object[]> it = resultList.iterator(); 
      while(it.hasNext()) 
      { 
       Object [] obj = it.next(); // fetching one row from the database. 

       //---- Deprecated ... 
       //finalJsonList.add(obj[0]); 
       //finalJsonList.add(obj[1]); 
       //finalJsonList.add(obj[2]); 

       //---- the new fragment is : How Add Label to the values : 
       //------------------------------------ 

       finalJsonList.put("Item ID", obj[1]); 
       finalJsonList.put("Item Name", obj[2]); 
       finalJsonList.put("Item Price", obj[3]); 

      } 
      JSONArray jsonArray = new JSONArray(catList); 
     HashMap<String, JSONArray> map = new HashMap<String, JSONArray>(); 

     map.put("finalJsonList", jsonArray); 
     JSONObject jsonObject = new JSONObject(map); 
     return jsonObject; 
     } 
     else{ 
      return null; 
     } 
    } 
} 

Теперь Hibernate менеджер будет выглядеть следующим образом:

public class HibernateManager{ 

    private SessionFactory sessionFactory; 
    static{ 
     //initialize the session factory here..... 
    } 

    public static List getItems(){ 
    String sql = "...."; // put your sql here full String; 
    Session session = sessionFactory.openSession(); 
    session.beginTransaction(); 
    Query query = session.createSQLQuery(sql); 
    List resultList = query.list(); 
    session.getTransaction().commit(); 
    return resultList; 
    } 
} 

Затем вам нужно Servlet и определить тип ответа является применение/JSON внутри этого сервлета:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 


    JSONObjectsRetriever jR = new JSONObjectsRetriever(); 
    JSONObject jsonObj = jR.getDataByID(); 

    response.setCharacterEncoding("UTF-8"); 
    response.setContentType("application/json"); 

    PrintWriter writer = response.getWriter(); 
    //System.out.println(jsonObj); 
    writer.print(jsonObj); 
    writer.flush(); 
    writer.close(); 
} 

, то в вас АЯКС навыки или JQuery вы можете использовать этот сервлет в методе обратного вызова для extact значения, как вы хотите: в этом примере я использовал JQuery ....

$.ajax(
{ 
     url : CONTEXT_ROOT+"ItemsJSONFromHibernateServlet", 
    type : "GET", 
    dataType : "json", 
     data : {"param1": value, "param2" : value2, ... etc}, //if you are like to send parameters to the database 
    success: function(data){ 
     // this will return JSON Object do what do you like here ... 

     //Iterating through JSON will be like this : 

     for (var key in data) 
     { 
      if (data.hasOwnProperty(key)) 
      { 
     //alert(key + " -> " + data[key]); 
     var subData = data[key]; 
     //alert(subData.ID+"Before"); 
     for(var j=0; j < subData.length; j++) 
      { 
     //alert(subData[j].Key); 
     if(subData[j].Key == val) 
       { 
     alert(subData[j].Value); 
     break; 
      } 
      } 
     } 
    } 
     }, 
     error: function(jqHXR){ 
     // to handle errors 
     } 
}); 

я надеюсь, что эта помощь .....

~ Ахмад А. Таха

+0

Спасибо, но я не вижу, как это создаст что-нибудь большее, чем просто плоский JSON .. Мне нужно добавить еще один цикл итератора/while в первый, чтобы создать список «ярлыков»? – JJeff

+0

I Отредактирован код выше, как добавить Lables для каждого объекта –

+0

, и я добавил в javascript $ .ajax() пример того, как итерации через json результат из функции обратного вызова jQuery –

Смежные вопросы