Skip to content

Commit 1b62f92

Browse files
committed
HHH-6109 bind sql result mapping and named query
1 parent 58e68ee commit 1b62f92

File tree

2 files changed

+28
-13
lines changed

2 files changed

+28
-13
lines changed

hibernate-core/src/main/java/org/hibernate/metamodel/internal/source/hbm/HibernateMappingProcessor.java

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434
import java.util.Set;
3535
import java.util.StringTokenizer;
3636

37+
import javax.xml.bind.JAXBElement;
38+
3739
import org.jboss.logging.Logger;
3840

3941
import org.hibernate.CacheMode;
@@ -775,13 +777,20 @@ public void parse(String queryName, List<Serializable> contents, NamedQueryDefin
775777
String query = "";
776778
boolean isQueryDefined = false;
777779
for ( Serializable obj : contents ) {
778-
if ( JaxbQueryParamElement.class.isInstance( obj ) ) {
780+
if(obj == null){
781+
continue;
782+
}
783+
else if ( JaxbQueryParamElement.class.isInstance( obj ) ) {
779784
JaxbQueryParamElement element = JaxbQueryParamElement.class.cast( obj );
780785
queryParam.put( element.getName(), element.getType() );
781786
}
782787
else if ( String.class.isInstance( obj ) ) {
783788
if ( !isQueryDefined ) {
784-
query = obj.toString();
789+
if( StringHelper.isNotEmpty( obj.toString().trim() )){
790+
query = obj.toString().trim();
791+
isQueryDefined = true;
792+
}
793+
785794
}
786795
else {
787796
throw new MappingException(
@@ -816,23 +825,30 @@ private class SQLQueryElementContentParserImpl extends QueryElementContentsParse
816825

817826
@Override
818827
protected void parseExtra(String queryName, Serializable obj, NamedQueryDefinitionBuilder builder) {
828+
if ( !JAXBElement.class.isInstance( obj ) ) {
829+
return;
830+
}
819831
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 );
822837
synchronizedTables.add( element.getTable() );
823838
}
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 ) );
826841
}
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 ) );
829844
}
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 ) );
832847
}
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 ) );
835850
}
851+
836852
}
837853
}
838854

hibernate-core/src/test/java/org/hibernate/test/annotations/loader/LoaderTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
/**
3939
* @author Emmanuel Bernard
4040
*/
41-
@FailureExpectedWithNewMetamodel
4241
public class LoaderTest extends BaseCoreFunctionalTestCase {
4342
@Override
4443
protected String[] getXmlFiles() {

0 commit comments

Comments
 (0)