|
34 | 34 | import java.util.Set;
|
35 | 35 | import java.util.StringTokenizer;
|
36 | 36 |
|
| 37 | +import javax.xml.bind.JAXBElement; |
| 38 | + |
37 | 39 | import org.jboss.logging.Logger;
|
38 | 40 |
|
39 | 41 | import org.hibernate.CacheMode;
|
@@ -775,13 +777,20 @@ public void parse(String queryName, List<Serializable> contents, NamedQueryDefin
|
775 | 777 | String query = "";
|
776 | 778 | boolean isQueryDefined = false;
|
777 | 779 | for ( Serializable obj : contents ) {
|
778 |
| - if ( JaxbQueryParamElement.class.isInstance( obj ) ) { |
| 780 | + if(obj == null){ |
| 781 | + continue; |
| 782 | + } |
| 783 | + else if ( JaxbQueryParamElement.class.isInstance( obj ) ) { |
779 | 784 | JaxbQueryParamElement element = JaxbQueryParamElement.class.cast( obj );
|
780 | 785 | queryParam.put( element.getName(), element.getType() );
|
781 | 786 | }
|
782 | 787 | else if ( String.class.isInstance( obj ) ) {
|
783 | 788 | if ( !isQueryDefined ) {
|
784 |
| - query = obj.toString(); |
| 789 | + if( StringHelper.isNotEmpty( obj.toString().trim() )){ |
| 790 | + query = obj.toString().trim(); |
| 791 | + isQueryDefined = true; |
| 792 | + } |
| 793 | + |
785 | 794 | }
|
786 | 795 | else {
|
787 | 796 | throw new MappingException(
|
@@ -816,23 +825,30 @@ private class SQLQueryElementContentParserImpl extends QueryElementContentsParse
|
816 | 825 |
|
817 | 826 | @Override
|
818 | 827 | protected void parseExtra(String queryName, Serializable obj, NamedQueryDefinitionBuilder builder) {
|
| 828 | + if ( !JAXBElement.class.isInstance( obj ) ) { |
| 829 | + return; |
| 830 | + } |
819 | 831 | NamedSQLQueryDefinitionBuilder sqlBuilder = NamedSQLQueryDefinitionBuilder.class.cast( builder );
|
820 |
| - if ( JaxbSynchronizeElement.class.isInstance( obj ) ) { |
821 |
| - JaxbSynchronizeElement element = JaxbSynchronizeElement.class.cast( obj ); |
| 832 | + JAXBElement jaxbElement = JAXBElement.class.cast( obj ); |
| 833 | + Class targetType = jaxbElement.getDeclaredType(); |
| 834 | + Object value = jaxbElement.getValue(); |
| 835 | + if ( JaxbSynchronizeElement.class == targetType ) { |
| 836 | + JaxbSynchronizeElement element = JaxbSynchronizeElement.class.cast( value ); |
822 | 837 | synchronizedTables.add( element.getTable() );
|
823 | 838 | }
|
824 |
| - else if ( JaxbLoadCollectionElement.class.isInstance( obj ) ) { |
825 |
| - loadCollectionElements.add( JaxbLoadCollectionElement.class.cast( obj ) ); |
| 839 | + else if ( JaxbLoadCollectionElement.class == targetType ) { |
| 840 | + loadCollectionElements.add( JaxbLoadCollectionElement.class.cast( value ) ); |
826 | 841 | }
|
827 |
| - else if ( JaxbReturnScalarElement.class.isInstance( obj ) ) { |
828 |
| - returnScalarElements.add( JaxbReturnScalarElement.class.cast( obj ) ); |
| 842 | + else if ( JaxbReturnScalarElement.class == targetType ) { |
| 843 | + returnScalarElements.add( JaxbReturnScalarElement.class.cast( value ) ); |
829 | 844 | }
|
830 |
| - else if ( JaxbReturnElement.class.isInstance( obj ) ) { |
831 |
| - returnElements.add( JaxbReturnElement.class.cast( obj ) ); |
| 845 | + else if ( JaxbReturnElement.class == targetType ) { |
| 846 | + returnElements.add( JaxbReturnElement.class.cast( value ) ); |
832 | 847 | }
|
833 |
| - else if ( JaxbReturnJoinElement.class.isInstance( obj ) ) { |
834 |
| - returnJoinElements.add( JaxbReturnJoinElement.class.cast( obj ) ); |
| 848 | + else if ( JaxbReturnJoinElement.class == targetType ) { |
| 849 | + returnJoinElements.add( JaxbReturnJoinElement.class.cast( value ) ); |
835 | 850 | }
|
| 851 | + |
836 | 852 | }
|
837 | 853 | }
|
838 | 854 |
|
|
0 commit comments