HHH-10774 - SortedMap defined in .hbm.xml are not sortable
(cherry picked from commit 60aac117e6
)
This commit is contained in:
parent
0ba858b91d
commit
ea9575294f
|
@ -11,9 +11,15 @@ import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmMapType;
|
|||
import org.hibernate.boot.model.source.spi.AttributeSourceContainer;
|
||||
import org.hibernate.boot.model.source.spi.PluralAttributeIndexSource;
|
||||
import org.hibernate.boot.model.source.spi.PluralAttributeNature;
|
||||
import org.hibernate.boot.model.source.spi.Sortable;
|
||||
import org.hibernate.internal.util.StringHelper;
|
||||
|
||||
public class PluralAttributeSourceMapImpl extends AbstractPluralAttributeSourceImpl implements IndexedPluralAttributeSource {
|
||||
public class PluralAttributeSourceMapImpl
|
||||
extends AbstractPluralAttributeSourceImpl
|
||||
implements IndexedPluralAttributeSource, Sortable {
|
||||
private final String sorting;
|
||||
private final PluralAttributeIndexSource indexSource;
|
||||
|
||||
private final String xmlNodeName;
|
||||
|
||||
public PluralAttributeSourceMapImpl(
|
||||
|
@ -23,6 +29,8 @@ public class PluralAttributeSourceMapImpl extends AbstractPluralAttributeSourceI
|
|||
super( sourceMappingDocument, jaxbMap, container );
|
||||
this.xmlNodeName = jaxbMap.getNode();
|
||||
|
||||
this.sorting = interpretSorting( jaxbMap.getSort() );
|
||||
|
||||
if ( jaxbMap.getMapKey() != null ) {
|
||||
this.indexSource = new PluralAttributeMapKeySourceBasicImpl( sourceMappingDocument, jaxbMap.getMapKey() );
|
||||
}
|
||||
|
@ -69,6 +77,18 @@ public class PluralAttributeSourceMapImpl extends AbstractPluralAttributeSourceI
|
|||
}
|
||||
}
|
||||
|
||||
private static String interpretSorting(String sort) {
|
||||
if ( StringHelper.isEmpty( sort ) ) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if ( "unsorted".equals( sort ) ) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return sort;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PluralAttributeIndexSource getIndexSource() {
|
||||
return indexSource;
|
||||
|
@ -88,4 +108,14 @@ public class PluralAttributeSourceMapImpl extends AbstractPluralAttributeSourceI
|
|||
public String getXmlNodeName() {
|
||||
return xmlNodeName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSorted() {
|
||||
return sorting != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getComparatorName() {
|
||||
return sorting;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,6 +21,11 @@
|
|||
<key column="searchString"/>
|
||||
<element column="text" type="string"/>
|
||||
</set>
|
||||
<map name="tokens" sort="natural" table="search_tokens">
|
||||
<key column="searchString"/>
|
||||
<map-key column="key" type="string"/>
|
||||
<element column="value" type="string"/>
|
||||
</map>
|
||||
</class>
|
||||
|
||||
</hibernate-mapping>
|
||||
|
|
|
@ -7,29 +7,43 @@
|
|||
|
||||
//$Id: Search.java 7772 2005-08-05 23:03:46Z oneovthafew $
|
||||
package org.hibernate.test.sorted;
|
||||
import java.util.SortedMap;
|
||||
import java.util.SortedSet;
|
||||
import java.util.TreeMap;
|
||||
import java.util.TreeSet;
|
||||
|
||||
public class Search {
|
||||
private String searchString;
|
||||
private SortedSet searchResults = new TreeSet();
|
||||
|
||||
private SortedMap<String,String> tokens = new TreeMap<>();
|
||||
|
||||
Search() {}
|
||||
|
||||
public Search(String string) {
|
||||
searchString = string;
|
||||
}
|
||||
|
||||
public SortedSet getSearchResults() {
|
||||
return searchResults;
|
||||
}
|
||||
public void setSearchResults(SortedSet searchResults) {
|
||||
this.searchResults = searchResults;
|
||||
}
|
||||
|
||||
public String getSearchString() {
|
||||
return searchString;
|
||||
}
|
||||
|
||||
public void setSearchString(String searchString) {
|
||||
this.searchString = searchString;
|
||||
}
|
||||
|
||||
public SortedSet getSearchResults() {
|
||||
return searchResults;
|
||||
}
|
||||
|
||||
public void setSearchResults(SortedSet searchResults) {
|
||||
this.searchResults = searchResults;
|
||||
}
|
||||
|
||||
public SortedMap<String, String> getTokens() {
|
||||
return tokens;
|
||||
}
|
||||
|
||||
public void setTokens(SortedMap<String, String> tokens) {
|
||||
this.tokens = tokens;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,11 +22,16 @@ import org.hibernate.Hibernate;
|
|||
import org.hibernate.Session;
|
||||
import org.hibernate.Transaction;
|
||||
import org.hibernate.annotations.SortNatural;
|
||||
import org.hibernate.mapping.Collection;
|
||||
import org.hibernate.mapping.PersistentClass;
|
||||
import org.hibernate.mapping.Property;
|
||||
|
||||
import org.hibernate.testing.TestForIssue;
|
||||
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
|
||||
import org.hibernate.testing.junit4.BaseNonConfigCoreFunctionalTestCase;
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
@ -36,7 +41,7 @@ import static org.junit.Assert.assertTrue;
|
|||
* @author Gavin King
|
||||
* @author Brett Meyer
|
||||
*/
|
||||
public class SortTest extends BaseCoreFunctionalTestCase {
|
||||
public class SortTest extends BaseNonConfigCoreFunctionalTestCase {
|
||||
|
||||
@Override
|
||||
protected String[] getMappings() {
|
||||
|
@ -48,6 +53,19 @@ public class SortTest extends BaseCoreFunctionalTestCase {
|
|||
return new Class<?>[] { Owner.class, Cat.class };
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSortedSetDefinitionInHbmXml() {
|
||||
final PersistentClass entityMapping = metadata().getEntityBinding( Search.class.getName() );
|
||||
|
||||
final Property sortedSetProperty = entityMapping.getProperty( "searchResults" );
|
||||
final Collection sortedSetMapping = assertTyping( Collection.class, sortedSetProperty.getValue() );
|
||||
assertTrue( "SortedSet mapping not interpreted as sortable", sortedSetMapping.isSorted() );
|
||||
|
||||
final Property sortedMapProperty = entityMapping.getProperty( "tokens" );
|
||||
final Collection sortedMapMapping = assertTyping( Collection.class, sortedMapProperty.getValue() );
|
||||
assertTrue( "SortedMap mapping not interpreted as sortable", sortedMapMapping.isSorted() );
|
||||
}
|
||||
|
||||
@Test
|
||||
@SuppressWarnings( {"unchecked"})
|
||||
public void testOrderBy() {
|
||||
|
|
Loading…
Reference in New Issue