[ http://jira.codehaus.org/browse/XDP-133?page=all ]
Konstantin Pribluda updated XDP-133: ------------------------------------ Issue Type: Improvement (was: Bug) changed to improvement > Omitted @hibernate.typdef tag in a @hibernate.joined-subclass > ------------------------------------------------------------- > > Key: XDP-133 > URL: http://jira.codehaus.org/browse/XDP-133 > Project: XDoclet 2 Plugins > Issue Type: Improvement > Components: hibernate > Affects Versions: 1.0.2 > Environment: Windows XP, ANT 1.6.5, Eclipse 3.1.1 > Reporter: Christoph Adl > > The problem is that if I use the @hibernate.typdef tag in a > @hibernate.joined-subclass tag it does not lead to any XML output in the > generated mapping file. Example: > ==== BaseClass.java ==== > package at.arcsmed.kio.beans; > /** > * @hibernate.class > * table = "Base_Class" > */ > public class BaseClass { > /** > * @hibernate.id > * generator-class = "native" > */ > private int id; > /** > * @return Returns the id. > */ > public int getId() { > return id; > } > /** > * @param id The id to set. > */ > public void setId(int id) { > this.id = id; > } > } > ==== DerivedClass.java ==== > package at.arcsmed.kio.beans; > // i've used the GenericEnumUserType from http://hibernate.org/272.html > /** > * @hibernate.joined-subclass > * table = "DerivedClass" > * > * @hibernate.typedef > * name = "TestEnumType" > * class = "at.arcsmed.kio.beans.enums.GenericEnumUserType" > * @hibernate.typedef-param > * typedef-name = "TestEnumType" > * name = "enumClass" > * value = "at.arcsmed.kio.beans.DerivedClass$TestEnum" > */ > public class DerivedClass extends BaseClass { > public enum TestEnum { > Value1, Value2 > } > /** > * @hibernate.property > * type = "TestEnumType" > */ > private TestEnum test; > /** > * @return Returns the test. > */ > public TestEnum getTest() { > return test; > } > /** > * @param test The test to set. > */ > public void setTest(TestEnum test) { > this.test = test; > } > } > ==== BaseClass.hbm.xml (generated via xdoclet2 1.0.2) ==== > <?xml version="1.0" encoding="ISO-8859-1"?> > <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD > 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> > <hibernate-mapping> > <class table="Base_Class" name="at.arcsmed.kio.beans.BaseClass"> > <id name="id"> > <generator class="native"/> > </id> > <joined-subclass name="at.arcsmed.kio.beans.DerivedClass" > table="DerivedClass"> > <key/> > <property name="test" type="TestEnumType"/> > </joined-subclass> > </class> > </hibernate-mapping> > ============= > There is no sign of my typedef :-(. While creating the example i realised, > that there is a problem with the ANT integration as well. If i make changes > to the DerivedClass.java-File, the BaseClass.hbm.xml file is not > re-generated! This problem is probably a result of the fact, that the > DerivedClass-Mapping must be included in the mapping file of BaseClass (a > speciality of the Hibernate DTD). The solution is, to create the > typedef-element in BaseClass.hbm.xml outside the class element (this must > happen for the whole inheritance tree - so for joined-subclass elements in > joined-subclass elements as well). So here is the proper BaseClass.hbm.xml > file: > <?xml version="1.0" encoding="ISO-8859-1"?> > <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD > 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> > <hibernate-mapping> > <typedef class="at.arcsmed.kio.beans.enums.GenericEnumUserType" > name="TestEnumType"> > <param name="enumClass">at.arcsmed.kio.beans.DerivedClass$TestEnum</param> > </typedef> > <class table="Base_Class" name="at.arcsmed.kio.beans.BaseClass"> > <id name="id"> > <generator class="native"/> > </id> > <joined-subclass name="at.arcsmed.kio.beans.DerivedClass" > table="DerivedClass"> > <key/> > <property name="test" type="TestEnumType"/> > </joined-subclass> > </class> > </hibernate-mapping> > As a result of the missing typedef I get an error during the creation of the > database schema with hibernate: > Exception in thread "main" org.hibernate.MappingException: Could not > determine type for: TestEnumType, for columns: > [org.hibernate.mapping.Column(test)] > [java] at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:265) > [java] at org.hibernate.mapping.Column.getSqlTypeCode(Column.java:128) > [java] at org.hibernate.mapping.Column.getSqlType(Column.java:172) > [java] at org.hibernate.mapping.Table.sqlCreateString(Table.java:263) > [java] at > org.hibernate.cfg.Configuration.generateSchemaCreationScript(Configuration.java:669) > [java] at > org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:65) > [java] at > org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:49) > [java] at > at.arcsmed.kio.test.HibernateSchema.createSchema(HibernateSchema.java:29) > [java] at > at.arcsmed.kio.test.HibernateSchema.main(HibernateSchema.java:24) -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://jira.codehaus.org/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys -- and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ xdoclet-plugins-interest mailing list xdoclet-plugins-interest@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/xdoclet-plugins-interest