@@ -644,6 +644,86 @@ public void testEmptyInList() {
644
644
session .close ();
645
645
}
646
646
647
+ @ Test
648
+ @ TestForIssue ( jiraKey = "HHH-2851" )
649
+ public void testMultipleRefsToSameParam () {
650
+ Session s = openSession ();
651
+ s .beginTransaction ();
652
+ Human h = new Human ();
653
+ h .setName ( new Name ( "Johnny" , 'B' , "Goode" ) );
654
+ s .save ( h );
655
+ h = new Human ();
656
+ h .setName ( new Name ( "Steve" , null , "Ebersole" ) );
657
+ s .save ( h );
658
+ h = new Human ();
659
+ h .setName ( new Name ( "Bono" , null , null ) );
660
+ s .save ( h );
661
+ h = new Human ();
662
+ h .setName ( new Name ( "Steve" , 'Z' , "Johnny" ) );
663
+ h .setIntValue ( 1 );
664
+ s .save ( h );
665
+ h = new Human ();
666
+ h .setName ( new Name ( null , null , null ) );
667
+ s .save ( h );
668
+ s .getTransaction ().commit ();
669
+ s .close ();
670
+
671
+ s = openSession ();
672
+ s .beginTransaction ();
673
+ List results = s .createQuery ( "from Human where name.first = :name or name.last=:name" )
674
+ .setParameter ( "name" , "Johnny" )
675
+ .list ();
676
+ assertEquals ( 2 , results .size () );
677
+
678
+ results = s .createQuery ( "from Human where name.last = :name or :name is null" )
679
+ .setParameter ( "name" , "Goode" )
680
+ .list ();
681
+ assertEquals ( 1 , results .size () );
682
+ results = s .createQuery ( "from Human where :name is null or name.last = :name" )
683
+ .setParameter ( "name" , "Goode" )
684
+ .list ();
685
+ assertEquals ( 1 , results .size () );
686
+
687
+ results = s .createQuery ( "from Human where name.first = :firstName and (name.last = :name or :name is null)" )
688
+ .setParameter ( "firstName" , "Bono" )
689
+ .setParameter ( "name" , null )
690
+ .list ();
691
+ assertEquals ( 1 , results .size () );
692
+ results = s .createQuery ( "from Human where name.first = :firstName and ( :name is null or name.last = :name )" )
693
+ .setParameter ( "firstName" , "Bono" )
694
+ .setParameter ( "name" , null )
695
+ .list ();
696
+ assertEquals ( 1 , results .size () );
697
+
698
+ results = s .createQuery ( "from Human where intValue = :intVal or :intVal is null" )
699
+ .setParameter ( "intVal" , 1 )
700
+ .list ();
701
+ assertEquals ( 1 , results .size () );
702
+ results = s .createQuery ( "from Human where :intVal is null or intValue = :intVal" )
703
+ .setParameter ( "intVal" , 1 )
704
+ .list ();
705
+ assertEquals ( 1 , results .size () );
706
+
707
+
708
+ results = s .createQuery ( "from Human where intValue = :intVal or :intVal is null" )
709
+ .setParameter ( "intVal" , null )
710
+ .list ();
711
+ assertEquals ( 5 , results .size () );
712
+ results = s .createQuery ( "from Human where :intVal is null or intValue = :intVal" )
713
+ .setParameter ( "intVal" , null )
714
+ .list ();
715
+ assertEquals ( 5 , results .size () );
716
+
717
+ s .getTransaction ().commit ();
718
+ s .close ();
719
+
720
+ s = openSession ();
721
+ s .beginTransaction ();
722
+ s .createQuery ( "delete Human" ).executeUpdate ();
723
+ s .getTransaction ().commit ();
724
+ s .close ();
725
+ }
726
+
647
727
@ Test
648
728
public void testComponentNullnessChecks () {
649
729
Session s = openSession ();
0 commit comments