HHH-13073 - AnyMetaDef.metaType should default to "string"
This commit is contained in:
parent
29e135c015
commit
7f001e50b2
|
@ -37,7 +37,7 @@ public @interface AnyMetaDef {
|
||||||
* Names the discriminator Hibernate Type for this Any/ManyToAny mapping. The default is to use
|
* Names the discriminator Hibernate Type for this Any/ManyToAny mapping. The default is to use
|
||||||
* {@link org.hibernate.type.StringType}
|
* {@link org.hibernate.type.StringType}
|
||||||
*/
|
*/
|
||||||
String metaType();
|
String metaType() default "string";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Names the identifier Hibernate Type for the entity associated through this Any/ManyToAny mapping.
|
* Names the identifier Hibernate Type for the entity associated through this Any/ManyToAny mapping.
|
||||||
|
|
|
@ -459,7 +459,7 @@ holding the name of the class (for that row). -->
|
||||||
|
|
||||||
<!ELEMENT any (meta*,meta-value*,column,column+)>
|
<!ELEMENT any (meta*,meta-value*,column,column+)>
|
||||||
<!ATTLIST any id-type CDATA #REQUIRED>
|
<!ATTLIST any id-type CDATA #REQUIRED>
|
||||||
<!ATTLIST any meta-type CDATA #IMPLIED> <!--- default: Hibernate.STRING -->
|
<!ATTLIST any meta-type CDATA "string"> <!--- default: Hibernate.STRING -->
|
||||||
<!ATTLIST any name CDATA #REQUIRED>
|
<!ATTLIST any name CDATA #REQUIRED>
|
||||||
<!ATTLIST any access CDATA #IMPLIED>
|
<!ATTLIST any access CDATA #IMPLIED>
|
||||||
<!ATTLIST any insert (true|false) "true">
|
<!ATTLIST any insert (true|false) "true">
|
||||||
|
|
|
@ -1110,7 +1110,7 @@
|
||||||
<!-- include the columns spanned by this association in an index -->
|
<!-- include the columns spanned by this association in an index -->
|
||||||
<xs:attribute name="insert" default="true" type="xs:boolean"/>
|
<xs:attribute name="insert" default="true" type="xs:boolean"/>
|
||||||
<xs:attribute name="lazy" default="false" type="xs:boolean"/>
|
<xs:attribute name="lazy" default="false" type="xs:boolean"/>
|
||||||
<xs:attribute name="meta-type" type="xs:string"/>
|
<xs:attribute name="meta-type" default="string" type="xs:string"/>
|
||||||
<!--- default: Hibernate.STRING -->
|
<!--- default: Hibernate.STRING -->
|
||||||
<xs:attribute name="name" use="required" type="xs:string"/>
|
<xs:attribute name="name" use="required" type="xs:string"/>
|
||||||
<xs:attribute name="node" type="xs:string"/>
|
<xs:attribute name="node" type="xs:string"/>
|
||||||
|
|
|
@ -0,0 +1,72 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
|
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||||
|
*/
|
||||||
|
package org.hibernate.test.annotations.any;
|
||||||
|
|
||||||
|
import javax.persistence.TypedQuery;
|
||||||
|
|
||||||
|
import org.hibernate.query.Query;
|
||||||
|
|
||||||
|
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate;
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertNotNull;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
public class AnyDefaultMetaTypeHbmTest extends BaseCoreFunctionalTestCase {
|
||||||
|
@Test
|
||||||
|
public void testDefaultAnyAssociation() {
|
||||||
|
doInHibernate( this::sessionFactory, s -> {
|
||||||
|
HbmPropertySet set1 = new HbmPropertySet( "string" );
|
||||||
|
Property property = new StringProperty( "name", "Alex" );
|
||||||
|
set1.setSomeProperty( property );
|
||||||
|
s.save( set1 );
|
||||||
|
|
||||||
|
HbmPropertySet set2 = new HbmPropertySet( "integer" );
|
||||||
|
property = new IntegerProperty( "age", 33 );
|
||||||
|
set2.setSomeProperty( property );
|
||||||
|
s.save( set2 );
|
||||||
|
} );
|
||||||
|
|
||||||
|
doInHibernate( this::sessionFactory, s -> {
|
||||||
|
TypedQuery<HbmPropertySet> q = s
|
||||||
|
.createQuery( "select s from HbmPropertySet s where name = :name", HbmPropertySet.class );
|
||||||
|
q.setParameter( "name", "string" );
|
||||||
|
HbmPropertySet result = q.getSingleResult();
|
||||||
|
|
||||||
|
assertNotNull( result );
|
||||||
|
assertNotNull( result.getSomeProperty() );
|
||||||
|
assertTrue( result.getSomeProperty() instanceof StringProperty );
|
||||||
|
assertEquals( "Alex", result.getSomeProperty().asString() );
|
||||||
|
|
||||||
|
q.setParameter( "name", "integer" );
|
||||||
|
result = q.getSingleResult();
|
||||||
|
|
||||||
|
assertNotNull( result );
|
||||||
|
assertNotNull( result.getSomeProperty() );
|
||||||
|
assertTrue( result.getSomeProperty() instanceof IntegerProperty );
|
||||||
|
assertEquals( "33", result.getSomeProperty().asString() );
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Class[] getAnnotatedClasses() {
|
||||||
|
return new Class[] {
|
||||||
|
StringProperty.class,
|
||||||
|
IntegerProperty.class,
|
||||||
|
LongProperty.class,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] getMappings() {
|
||||||
|
return new String[] {
|
||||||
|
"annotations/any/AnyDefaultMetaTypeHbmTest.hbm.xml"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
|
@ -113,7 +113,7 @@ public class EmbeddedAnyTest extends BaseEntityManagerFunctionalTestCase {
|
||||||
@Embeddable
|
@Embeddable
|
||||||
public static class FooEmbeddable {
|
public static class FooEmbeddable {
|
||||||
|
|
||||||
@AnyMetaDef(idType = "integer", metaType = "string", metaValues = {
|
@AnyMetaDef(idType = "integer", metaValues = {
|
||||||
@MetaValue(value = "1", targetEntity = Bar1.class),
|
@MetaValue(value = "1", targetEntity = Bar1.class),
|
||||||
@MetaValue(value = "2", targetEntity = Bar2.class)
|
@MetaValue(value = "2", targetEntity = Bar2.class)
|
||||||
})
|
})
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
|
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||||
|
*/
|
||||||
|
package org.hibernate.test.annotations.any;
|
||||||
|
|
||||||
|
public class HbmPropertySet {
|
||||||
|
private Integer id;
|
||||||
|
private String name;
|
||||||
|
private Property someProperty;
|
||||||
|
|
||||||
|
public HbmPropertySet() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public HbmPropertySet(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Integer id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Property getSomeProperty() {
|
||||||
|
return someProperty;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSomeProperty(Property someProperty) {
|
||||||
|
this.someProperty = someProperty;
|
||||||
|
}
|
||||||
|
}
|
|
@ -57,7 +57,7 @@ public class PropertyMap {
|
||||||
|
|
||||||
@ManyToAny( metaColumn = @Column( name = "property_type" ) )
|
@ManyToAny( metaColumn = @Column( name = "property_type" ) )
|
||||||
@AnyMetaDef(
|
@AnyMetaDef(
|
||||||
idType = "integer", metaType = "string",
|
idType = "integer",
|
||||||
metaValues = {
|
metaValues = {
|
||||||
@MetaValue( value = "S", targetEntity = StringProperty.class ),
|
@MetaValue( value = "S", targetEntity = StringProperty.class ),
|
||||||
@MetaValue( value = "I", targetEntity = IntegerProperty.class ) } )
|
@MetaValue( value = "I", targetEntity = IntegerProperty.class ) } )
|
||||||
|
|
|
@ -41,7 +41,7 @@ public class PropertySet {
|
||||||
|
|
||||||
@ManyToAny(
|
@ManyToAny(
|
||||||
metaColumn = @Column( name = "property_type" ) )
|
metaColumn = @Column( name = "property_type" ) )
|
||||||
@AnyMetaDef( idType = "integer", metaType = "string",
|
@AnyMetaDef( idType = "integer",
|
||||||
metaValues = {
|
metaValues = {
|
||||||
@MetaValue( value = "S", targetEntity = StringProperty.class ),
|
@MetaValue( value = "S", targetEntity = StringProperty.class ),
|
||||||
@MetaValue( value = "I", targetEntity = IntegerProperty.class ) } )
|
@MetaValue( value = "I", targetEntity = IntegerProperty.class ) } )
|
||||||
|
@ -76,7 +76,7 @@ public class PropertySet {
|
||||||
|
|
||||||
@Any( metaColumn = @Column( name = "property_type" ) )
|
@Any( metaColumn = @Column( name = "property_type" ) )
|
||||||
@Cascade( value = { CascadeType.ALL } )
|
@Cascade( value = { CascadeType.ALL } )
|
||||||
@AnyMetaDef( idType = "integer", metaType = "string", metaValues = {
|
@AnyMetaDef( idType = "integer", metaValues = {
|
||||||
@MetaValue( value = "S", targetEntity = StringProperty.class ),
|
@MetaValue( value = "S", targetEntity = StringProperty.class ),
|
||||||
@MetaValue( value = "I", targetEntity = IntegerProperty.class )
|
@MetaValue( value = "I", targetEntity = IntegerProperty.class )
|
||||||
} )
|
} )
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// $Id$
|
// $Id$
|
||||||
@AnyMetaDef( name= "Property", metaType = "string", idType = "integer",
|
@AnyMetaDef( name= "Property", idType = "integer",
|
||||||
metaValues = {
|
metaValues = {
|
||||||
@MetaValue(value = "C", targetEntity = CharProperty.class),
|
@MetaValue(value = "C", targetEntity = CharProperty.class),
|
||||||
@MetaValue(value = "I", targetEntity = IntegerProperty.class),
|
@MetaValue(value = "I", targetEntity = IntegerProperty.class),
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!--
|
||||||
|
~ Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
~
|
||||||
|
~ License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
|
~ See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||||
|
-->
|
||||||
|
<!DOCTYPE hibernate-mapping PUBLIC
|
||||||
|
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
|
||||||
|
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
|
||||||
|
|
||||||
|
<hibernate-mapping package="org.hibernate.test.annotations.any">
|
||||||
|
<class name="HbmPropertySet" table="lazy_property_set">
|
||||||
|
<id name="id" type="java.lang.Integer">
|
||||||
|
<generator class="increment"/>
|
||||||
|
</id>
|
||||||
|
|
||||||
|
<property name="name"/>
|
||||||
|
|
||||||
|
<any name="someProperty" id-type="integer" cascade="all" lazy="false">
|
||||||
|
<meta-value value="S" class="StringProperty"/>
|
||||||
|
<meta-value value="I" class="IntegerProperty"/>
|
||||||
|
<column name="PROP_TYPE"/>
|
||||||
|
<column name="property_id"/>
|
||||||
|
</any>
|
||||||
|
</class>
|
||||||
|
</hibernate-mapping>
|
Loading…
Reference in New Issue