2009-10-20 7 views
1

J'ai un problème avec l'obtention des éléments de la liste, ci-dessous est mon code d'hibernation, après ce code il y a ma méthode ..et ci-dessous c'est mon test de junit. Comment puis-je m'assurer que la requête s'exécute correctement, et comment puis-je vérifier que les résultats fonctionnent réellement? Cette requête devrait retourner quelques pids .. et les mettre dans la liste .. maintenant je suis sûr à 90% que ma liste est toujours vide .. elle devrait plutôt avoir 3: pid 4573, 4593, 4693 .. peut-on comprendre ce que je fais mal .. pourquoi les pid ne sont pas dans ma liste ..Problèmes avec les éléments ArrayList et hibernation

<sql-query name="endDateChecker"> 
<return-scalar column="PId" type="java.lang.Long"/> 
      <![CDATA[select 
         pid as PId 
     from 
       info 
     where 
     end_date < trunc(sysdate)]]>    
</sql-query> 

< - HIBERNATE->

public List<Long> findItemByPIdEndDate() throws ROSException { 

       List<Long> list = null; 

       try{ 
         Session session = sessionFactory.getCurrentSession(); 
         Query query = session.getNamedQuery("endDateChecker"); 
         list = query.list(); 

         for (Long long1 : list) { 
           logger.info(long1); 
         } 

       }catch (HibernateException e){ 
         throw new DataAccessException(e.getMessage()); 
       } 

       return list; 
     } 

< -METHOD->

public class FindItemByPIdEndDateTest{ 

     private static final Log logger = ROSLogFactory.getLog(FindItemByPIdEndDateTest.class); 

     private ApplicationContext beanFactory; 
     private PersistenceMngt lps = null; 

     @Before 
     public void setUp() throws Exception { 
       beanFactory = new ClassPathXmlApplicationContext("/resources/ros-conf/engine-conf/applicationContext.xml"); 
       lps = (PersistenceMngt)beanFactory.getBean("persistenceMngtService"); 
     } 

     @After 
     public void tearDown() throws Exception { 
     } 

     @Test 
     public void testFindItemByPIdEndDate(){ 

       List<Long> itemdb = null; 
       try { 
         itemdb = lps.findLroByPIdEndDate(); 

//    assertNull("List is empty", itemdb); 
//      assertEquals(4573, itemdb.indexOf(0)); 
//      assertEquals(3, itemdb.size()); 
//      assertEquals(4593, itemdb.indexOf(1)); 
//      assertEquals(4693, itemdb.indexOf(2)); 


       } catch (ROSException e) { 
         e.printStackTrace(); 
         fail(e.getMessage()); 
       }   
     } 
} 

< -TEST->

Répondre

0

Avez-vous essayé d'utiliser

type="long" 

au lieu de

type="java.lang.Long" 

comme il est in the example in the docs?

+0

Même chose ... Je reçois les mêmes résultats .. ce qui signifie que la liste des objets est toujours vide –

0

Avez-vous activé la journalisation hibernate sur DEBUG pour voir ce qu'elle fait réellement?

Vous pouvez également définir les propriétés système suivantes à "true":

  • hibernate.show_sql
  • hibernate.format_sql

Cela devrait vider le SQL qu'il émet.

0

Mon erreur, j'inséré des données dans la base de données avec le développeur SQL a oublié de pousser le bouton « commit »: P

0

Essayez cette

<sql-query name="endDateChecker"> 
<return-scalar column="PId" type="java.lang.Long"/> 
      <![CDATA[select 
         pid as PId 
     from 
       info   
</sql-query> 

pour écarter un problème avec le prédicat.

Questions connexes