KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > hibernate > test > legacy > SQLLoaderTest


1 //$Id: SQLLoaderTest.java,v 1.14 2005/04/03 04:15:47 oneovthafew Exp $
2
package org.hibernate.test.legacy;
3
4 import java.sql.SQLException JavaDoc;
5 import java.util.ArrayList JavaDoc;
6 import java.util.Date JavaDoc;
7 import java.util.List JavaDoc;
8
9 import junit.framework.Test;
10 import junit.framework.TestSuite;
11 import junit.textui.TestRunner;
12
13 import org.hibernate.HibernateException;
14 import org.hibernate.Query;
15 import org.hibernate.classic.Session;
16 import org.hibernate.dialect.HSQLDialect;
17 import org.hibernate.dialect.MySQLDialect;
18 import org.hibernate.dialect.Oracle9Dialect;
19 import org.hibernate.dialect.PostgreSQLDialect;
20 import org.hibernate.dialect.SQLServerDialect;
21 import org.hibernate.dialect.TimesTenDialect;
22 import org.hibernate.dialect.OracleDialect;
23 import org.hibernate.test.TestCase;
24
25 public class SQLLoaderTest extends TestCase {
26
27     static int nextInt = 1;
28     static long nextLong = 1;
29     public SQLLoaderTest(String JavaDoc arg) {
30         super(arg);
31     }
32
33     public void testTS() throws Exception JavaDoc {
34         if (getDialect() instanceof Oracle9Dialect) return;
35         Session session = openSession();
36         Simple sim = new Simple();
37         sim.setDate( new Date JavaDoc() );
38         session.save( sim, new Long JavaDoc(1) );
39         Query q = session.createSQLQuery("select {sim.*} from Simple {sim} where {sim}.date_ = ?", "sim", Simple.class);
40         q.setTimestamp( 0, sim.getDate() );
41         assertTrue ( q.list().size()==1 );
42         session.delete(sim);
43         session.flush();
44         session.connection().commit();
45         session.close();
46     }
47
48
49     public void testFindBySQLStar() throws HibernateException, SQLException JavaDoc {
50         Session session = openSession();
51         session.delete("from Assignable");
52         session.delete("from Category");
53         session.delete("from Simple");
54         session.delete("from A");
55
56         Category s = new Category();
57         s.setName(String.valueOf(nextLong++));
58         session.save(s);
59
60         Simple simple = new Simple();
61         simple.init();
62         session.save(simple, new Long JavaDoc(nextLong++));
63
64         A a = new A();
65         session.save(a);
66
67         B b = new B();
68         session.save(b);
69         session.flush();
70
71         session.createSQLQuery("select {category.*} from Category {category}", "category", Category.class).list();
72         session.createSQLQuery("select {simple.*} from Simple {simple}", "simple", Simple.class).list();
73         session.createSQLQuery("select {a.*} from A {a}", "a", A.class).list();
74
75         session.connection().commit();
76         session.close();
77
78     }
79
80     public void testFindBySQLProperties() throws HibernateException, SQLException JavaDoc {
81             Session session = openSession();
82             session.delete("from Category");
83
84             Category s = new Category();
85             s.setName(String.valueOf(nextLong++));
86             session.save(s);
87
88             s = new Category();
89             s.setName("WannaBeFound");
90             session.flush();
91
92             Query query = session.createSQLQuery("select {category.*} from Category {category} where {category}.name = :name", "category", Category.class);
93
94             query.setProperties(s);
95             //query.setParameter("name", s.getName());
96

97             query.list();
98
99             query = session.createSQLQuery("select {category.*} from Category {category} where {category}.name in (:names)", "category", Category.class);
100             String JavaDoc[] str = new String JavaDoc[] { "WannaBeFound", "NotThere" };
101             query.setParameterList("names", str);
102             
103             query.uniqueResult();
104             
105             session.connection().commit();
106             session.close();
107             
108             
109
110         }
111
112     public void testFindBySQLAssociatedObjects() throws HibernateException, SQLException JavaDoc {
113         Session s = openSession();
114         s.delete("from Assignable");
115         s.delete("from Category");
116
117         Category c = new Category();
118         c.setName("NAME");
119         Assignable assn = new Assignable();
120         assn.setId("i.d.");
121         List JavaDoc l = new ArrayList JavaDoc();
122         l.add(c);
123         assn.setCategories(l);
124         c.setAssignable(assn);
125         s.save(assn);
126         s.flush();
127         s.connection().commit();
128         s.close();
129
130         s = openSession();
131         List JavaDoc list = s.createSQLQuery("select {category.*} from Category {category}", "category", Category.class).list();
132         list.get(0);
133         s.connection().commit();
134         s.close();
135         
136         if ( getDialect() instanceof MySQLDialect ) return;
137         if ( getDialect() instanceof OracleDialect ) return; // todo : this fails on Oracle8 also
138

139         s = openSession();
140
141         Query query = s.getNamedQuery("namedsql");
142         assertNotNull(query);
143         list = query.list();
144         assertNotNull(list);
145         
146         Object JavaDoc[] values = (Object JavaDoc[]) list.get(0);
147         assertNotNull(values[0]);
148         assertNotNull(values[1]);
149         assertTrue("wrong type: " + values[0].getClass(), values[0] instanceof Category);
150         assertTrue("wrong type: " + values[1].getClass(), values[1] instanceof Assignable);
151         
152         s.connection().commit();
153         s.close();
154
155     }
156
157     public void testPropertyResultSQL() throws HibernateException, SQLException JavaDoc {
158         
159         if ( getDialect() instanceof MySQLDialect ) return;
160             
161         Session s = openSession();
162         s.delete("from Assignable");
163         s.delete("from Category");
164
165         Category c = new Category();
166         c.setName("NAME");
167         Assignable assn = new Assignable();
168         assn.setId("i.d.");
169         List JavaDoc l = new ArrayList JavaDoc();
170         l.add(c);
171         assn.setCategories(l);
172         c.setAssignable(assn);
173         s.save(assn);
174         s.flush();
175         s.connection().commit();
176         s.close();
177
178         s = openSession();
179
180         Query query = s.getNamedQuery("nonaliasedsql");
181         assertNotNull(query);
182         List JavaDoc list = query.list();
183         assertNotNull(list);
184         
185         assertTrue(list.get(0) instanceof Category);
186         
187         s.connection().commit();
188         s.close();
189
190     }
191     
192     public void testFindBySQLMultipleObject() throws HibernateException, SQLException JavaDoc {
193         Session s = openSession();
194         s.delete("from Assignable");
195         s.delete("from Category");
196         s.flush();
197         s.connection().commit();
198         s.close();
199         s = openSession();
200         Category c = new Category();
201         c.setName("NAME");
202         Assignable assn = new Assignable();
203         assn.setId("i.d.");
204         List JavaDoc l = new ArrayList JavaDoc();
205         l.add(c);
206         assn.setCategories(l);
207         c.setAssignable(assn);
208         s.save(assn);
209         s.flush();
210         c = new Category();
211         c.setName("NAME2");
212         assn = new Assignable();
213         assn.setId("i.d.2");
214         l = new ArrayList JavaDoc();
215         l.add(c);
216         assn.setCategories(l);
217         c.setAssignable(assn);
218         s.save(assn);
219         s.flush();
220
221         assn = new Assignable();
222         assn.setId("i.d.3");
223         s.save(assn);
224         s.flush();
225         s.connection().commit();
226         s.close();
227
228         if ( getDialect() instanceof MySQLDialect ) return;
229
230         s = openSession();
231         List JavaDoc list = s.createSQLQuery("select {category.*}, {assignable.*} from Category {category}, \"assign-able\" {assignable}", new String JavaDoc[] { "category", "assignable" }, new Class JavaDoc[] { Category.class, Assignable.class }).list();
232
233         assertTrue(list.size() == 6); // crossproduct of 2 categories x 3 assignables
234
assertTrue(list.get(0) instanceof Object JavaDoc[]);
235         s.connection().commit();
236         s.close();
237     }
238
239     public void testFindBySQLParameters() throws HibernateException, SQLException JavaDoc {
240         Session s = openSession();
241         s.delete("from Assignable");
242         s.delete("from Category");
243         s.flush();
244         s.connection().commit();
245         s.close();
246         s = openSession();
247         Category c = new Category();
248         c.setName("Good");
249         Assignable assn = new Assignable();
250         assn.setId("i.d.");
251         List JavaDoc l = new ArrayList JavaDoc();
252         l.add(c);
253         assn.setCategories(l);
254         c.setAssignable(assn);
255         s.save(assn);
256         s.flush();
257         c = new Category();
258         c.setName("Best");
259         assn = new Assignable();
260         assn.setId("i.d.2");
261         l = new ArrayList JavaDoc();
262         l.add(c);
263         assn.setCategories(l);
264         c.setAssignable(assn);
265         s.save(assn);
266         s.flush();
267         c = new Category();
268         c.setName("Better");
269         assn = new Assignable();
270         assn.setId("i.d.7");
271         l = new ArrayList JavaDoc();
272         l.add(c);
273         assn.setCategories(l);
274         c.setAssignable(assn);
275         s.save(assn);
276         s.flush();
277
278         assn = new Assignable();
279         assn.setId("i.d.3");
280         s.save(assn);
281         s.flush();
282         s.connection().commit();
283         s.close();
284
285         s = openSession();
286         Query basicParam = s.createSQLQuery("select {category.*} from Category {category} where {category}.name = 'Best'", "category", Category.class);
287         List JavaDoc list = basicParam.list();
288         assertEquals(1, list.size());
289
290         Query unnamedParam = s.createSQLQuery("select {category.*} from Category {category} where {category}.name = ? or {category}.name = ?", "category", Category.class);
291         unnamedParam.setString(0, "Good");
292         unnamedParam.setString(1, "Best");
293         list = unnamedParam.list();
294         assertEquals(2, list.size());
295
296         Query namedParam = s.createSQLQuery("select {category.*} from Category {category} where ({category}.name=:firstCat or {category}.name=:secondCat)", "category", Category.class);
297         namedParam.setString("firstCat", "Better");
298         namedParam.setString("secondCat", "Best");
299         list = namedParam.list();
300         assertEquals(2, list.size());
301
302         s.connection().commit();
303         s.close();
304     }
305
306     public void testEscapedJDBC() throws HibernateException, SQLException JavaDoc {
307         if (
308                 getDialect() instanceof HSQLDialect ||
309                 getDialect() instanceof SQLServerDialect ||
310                 getDialect() instanceof PostgreSQLDialect
311         ) return;
312
313         Session session = openSession();
314         session.delete("from A");
315         A savedA = new A();
316         savedA.setName("Max");
317         session.save(savedA);
318
319         B savedB = new B();
320         session.save(savedB);
321         session.flush();
322
323         int count = session.createQuery("from A").list().size();
324         session.close();
325
326         session = openSession();
327
328         Query query;
329         if ( getDialect() instanceof OracleDialect ) {
330             // Oracle8 does not support X/Open extension functions :)
331
query = session.createSQLQuery("select identifier_column as {a.id}, clazz_discriminata as {a.class}, count_ as {a.count}, name as {a.name} from A where upper(name) like upper('max')", "a", A.class);
332         }
333         else if( getDialect() instanceof TimesTenDialect) {
334             // TimesTen does not permit general expressions (like UPPER) in the second part of a LIKE expression,
335
// so we execute a similar test
336
query = session.createSQLQuery("select identifier_column as {a.id}, clazz_discriminata as {a.class}, count_ as {a.count}, name as {a.name} from A where {fn ucase(name)} like 'MAX'", "a", A.class);
337         } else {
338             query = session.createSQLQuery("select identifier_column as {a.id}, clazz_discriminata as {a.class}, count_ as {a.count}, name as {a.name} from A where {fn ucase(name)} like {fn ucase('max')}", "a", A.class);
339         }
340         List JavaDoc list = query.list();
341
342         assertNotNull(list);
343         assertEquals(1, list.size());
344         session.connection().commit();
345         session.close();
346     }
347
348     public void testDoubleAliasing() throws HibernateException, SQLException JavaDoc {
349         if ( getDialect() instanceof HSQLDialect || getDialect() instanceof SQLServerDialect ) return;
350
351         Session session = openSession();
352         session.delete("from A");
353         A savedA = new A();
354         savedA.setName("Max");
355         session.save(savedA);
356
357         B savedB = new B();
358         session.save(savedB);
359         session.flush();
360
361         int count = session.createQuery("from A").list().size();
362         session.close();
363
364         session = openSession();
365
366         Query query = session.createSQLQuery("select a.identifier_column as {a1.id}, a.clazz_discriminata as {a1.class}, a.count_ as {a1.count}, a.name as {a1.name} " +
367                                             ", b.identifier_column as {a2.id}, b.clazz_discriminata as {a2.class}, b.count_ as {a2.count}, b.name as {a2.name} " +
368                                             " from A a, A b" +
369                                             " where a.identifier_column = b.identifier_column", new String JavaDoc[] {"a1", "a2" }, new Class JavaDoc[] {A.class, A.class});
370         List JavaDoc list = query.list();
371
372         assertNotNull(list);
373         assertEquals(2, list.size());
374         session.connection().commit();
375         session.close();
376     }
377
378     // TODO: compositeid's - how ? (SingleSeveral.hbm.xml test)
379
public void testEmbeddedCompositeProperties() throws HibernateException, SQLException JavaDoc {
380        Session session = openSession();
381
382        Single s = new Single();
383        s.setId("my id");
384        s.setString("string 1");
385        session.save(s);
386        session.flush();
387        session.connection().commit();
388
389        session.clear();
390
391        Query query = session.createSQLQuery("select {sing.*} from Single {sing}", "sing", Single.class);
392
393        List JavaDoc list = query.list();
394
395        assertTrue(list.size()==1);
396
397        session.clear();
398
399        query = session.createSQLQuery("select {sing.*} from Single {sing} where sing.id = ?", "sing", Single.class);
400        query.setString(0, "my id");
401        list = query.list();
402
403        assertTrue(list.size()==1);
404
405        session.clear();
406
407        query = session.createSQLQuery("select s.id as {sing.id}, s.string_ as {sing.string}, s.prop as {sing.prop} from Single s where s.id = ?", "sing", Single.class);
408        query.setString(0, "my id");
409        list = query.list();
410
411        assertTrue(list.size()==1);
412
413        session.clear();
414
415        query = session.createSQLQuery("select s.id as {sing.id}, s.string_ as {sing.string}, s.prop as {sing.prop} from Single s where s.id = ?", "sing", Single.class);
416        query.setString(0, "my id");
417        list = query.list();
418
419        assertTrue(list.size()==1);
420
421        session.connection().commit();
422        session.close();
423
424     }
425     
426     public void testComponentStar() throws HibernateException, SQLException JavaDoc {
427         componentTest("select {comp.*} from Componentizable comp");
428     }
429     
430     public void testComponentNoStar() throws HibernateException, SQLException JavaDoc {
431         componentTest("select comp.id as {comp.id}, comp.nickName as {comp.nickName}, comp.name as {comp.component.name}, comp.subName as {comp.component.subComponent.subName}, comp.subName1 as {comp.component.subComponent.subName1} from Componentizable comp");
432     }
433     
434
435     private void componentTest(String JavaDoc sql) throws SQLException JavaDoc {
436         Session session = openSession();
437         
438         Componentizable c = new Componentizable();
439         c.setNickName("Flacky");
440         Component component = new Component();
441         component.setName("flakky comp");
442         SubComponent subComponent = new SubComponent();
443         subComponent.setSubName("subway");
444         component.setSubComponent(subComponent);
445         
446         c.setComponent(component);
447         
448         session.save(c);
449         
450         session.flush();
451         session.connection().commit();
452         
453         session.clear();
454         
455         Query q = session.createSQLQuery(sql, "comp", Componentizable.class);
456         List JavaDoc list = q.list();
457         
458         assertEquals(list.size(),1);
459         
460         Componentizable co = (Componentizable) list.get(0);
461         
462         assertEquals(c.getNickName(), co.getNickName());
463         assertEquals(c.getComponent().getName(), co.getComponent().getName());
464         assertEquals(c.getComponent().getSubComponent().getSubName(), co.getComponent().getSubComponent().getSubName());
465         
466         session.delete(co);
467         session.flush();
468         session.connection().commit();
469         session.close();
470     }
471
472     public void testFindSimpleBySQL() throws Exception JavaDoc {
473         if ( getDialect() instanceof MySQLDialect ) return;
474         Session session = openSession();
475         Category s = new Category();
476         s.setName(String.valueOf(nextLong++));
477         session.save(s);
478         session.flush();
479
480         Query query = session.createSQLQuery("select s.category_key_col as {category.id}, s.name as {category.name}, s.\"assign-able-id\" as {category.assignable} from {category} s", "category", Category.class);
481         List JavaDoc list = query.list();
482
483         assertNotNull(list);
484         assertTrue(list.size() > 0);
485         assertTrue(list.get(0) instanceof Category);
486         session.connection().commit();
487         session.close();
488         // How do we handle objects with composite id's ? (such as Single)
489
}
490
491     public void testFindBySQLSimpleByDiffSessions() throws Exception JavaDoc {
492         Session session = openSession();
493         Category s = new Category();
494         s.setName(String.valueOf(nextLong++));
495         session.save(s);
496         session.flush();
497         session.connection().commit();
498         session.close();
499
500         if ( getDialect() instanceof MySQLDialect ) return;
501
502         session = openSession();
503
504         Query query = session.createSQLQuery("select s.category_key_col as {category.id}, s.name as {category.name}, s.\"assign-able-id\" as {category.assignable} from {category} s", "category", Category.class);
505         List JavaDoc list = query.list();
506
507         assertNotNull(list);
508         assertTrue(list.size() > 0);
509         assertTrue(list.get(0) instanceof Category);
510
511         // How do we handle objects that does not have id property (such as Simple ?)
512
// How do we handle objects with composite id's ? (such as Single)
513
session.connection().commit();
514         session.close();
515     }
516
517     public void testFindBySQLDiscriminatedSameSession() throws Exception JavaDoc {
518         Session session = openSession();
519         session.delete("from A");
520         A savedA = new A();
521         session.save(savedA);
522
523         B savedB = new B();
524         session.save(savedB);
525         session.flush();
526
527         Query query = session.createSQLQuery("select identifier_column as {a.id}, clazz_discriminata as {a.class}, name as {a.name}, count_ as {a.count} from {a} s", "a", A.class);
528         List JavaDoc list = query.list();
529
530         assertNotNull(list);
531         assertEquals(2, list.size());
532
533         A a1 = (A) list.get(0);
534         A a2 = (A) list.get(1);
535
536         assertTrue((a2 instanceof B) || (a1 instanceof B));
537         assertFalse(a1 instanceof B && a2 instanceof B);
538
539         if (a1 instanceof B) {
540             assertSame(a1, savedB);
541             assertSame(a2, savedA);
542         }
543         else {
544             assertSame(a2, savedB);
545             assertSame(a1, savedA);
546         }
547
548         session.clear();
549         List JavaDoc list2 = session.getNamedQuery("propertyResultDiscriminator").list();
550         assertEquals(2, list2.size());
551         
552         session.connection().commit();
553         session.close();
554     }
555
556     public void testFindBySQLDiscriminatedDiffSession() throws Exception JavaDoc {
557         Session session = openSession();
558         session.delete("from A");
559         A savedA = new A();
560         session.save(savedA);
561
562         B savedB = new B();
563         session.save(savedB);
564         session.flush();
565
566         int count = session.createQuery("from A").list().size();
567         session.close();
568
569         session = openSession();
570
571         Query query = session.createSQLQuery("select identifier_column as {a.id}, clazz_discriminata as {a.class}, count_ as {a.count}, name as {a.name} from A", "a", A.class);
572         List JavaDoc list = query.list();
573
574         assertNotNull(list);
575         assertEquals(count, list.size());
576         session.connection().commit();
577         session.close();
578     }
579
580
581     /** @issue HHH-21 */
582     public void testCompositeIdId() throws HibernateException, SQLException JavaDoc {
583         Session s = openSession();
584         
585         CompositeIdId id = new CompositeIdId();
586         id.setName("Max");
587         id.setSystem("c64");
588         id.setId("games");
589         
590         s.save(id);
591         s.flush();
592         s.connection().commit();
593         s.close();
594         
595         s = openSession();
596         // having a composite id with one property named id works since the map used by sqlloader to map names to properties handles it.
597
Query query = s.createSQLQuery("select system as {c.system}, id as {c.id}, name as {c.name}, foo as {c.composite.foo}, bar as {c.composite.bar} from CompositeIdId where system=? and id=?", "c", CompositeIdId.class);
598         query.setString(0, "c64");
599         query.setString(1, "games");
600         
601         CompositeIdId id2 = (CompositeIdId) query.uniqueResult();
602         check(id, id2);
603
604         s.flush();
605         s.connection().commit();
606         s.close();
607
608         s = openSession();
609         
610         CompositeIdId useForGet = new CompositeIdId();
611         useForGet.setSystem("c64");
612         useForGet.setId("games");
613         // this doesn't work since the verification does not take column span into respect!
614
CompositeIdId getted = (CompositeIdId) s.get(CompositeIdId.class, useForGet);
615         check(id,getted);
616         
617         
618         s.connection().commit();
619         s.close();
620         
621     }
622     
623     
624     /**
625      * @param id
626      * @param id2
627      */

628     private void check(CompositeIdId id, CompositeIdId id2) {
629         assertEquals(id,id2);
630         assertEquals(id.getName(), id2.getName());
631         assertEquals(id.getId(), id2.getId());
632         assertEquals(id.getSystem(), id2.getSystem());
633     }
634
635     public String JavaDoc[] getMappings() {
636         return new String JavaDoc[] {
637             "legacy/ABC.hbm.xml",
638             "legacy/Category.hbm.xml",
639             "legacy/Simple.hbm.xml",
640             "legacy/Fo.hbm.xml",
641             "legacy/SingleSeveral.hbm.xml",
642             "legacy/Componentizable.hbm.xml",
643             "legacy/CompositeIdId.hbm.xml"
644         };
645     }
646
647     public static Test suite() {
648         return new TestSuite(SQLLoaderTest.class);
649     }
650
651     public static void main(String JavaDoc[] args) throws Exception JavaDoc {
652         TestRunner.run( suite() );
653     }
654
655 }
656
Popular Tags