From jbosstools-commits at lists.jboss.org Wed Feb 13 12:24:28 2008 Content-Type: multipart/mixed; boundary="===============7286471117675989010==" MIME-Version: 1.0 From: jbosstools-commits at lists.jboss.org To: jbosstools-commits at lists.jboss.org Subject: [jbosstools-commits] JBoss Tools SVN: r6304 - trunk/hibernatetools/docs/reference/en/modules. Date: Wed, 13 Feb 2008 12:24:27 -0500 Message-ID: --===============7286471117675989010== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Author: ochikvina Date: 2008-02-13 12:24:27 -0500 (Wed, 13 Feb 2008) New Revision: 6304 Modified: trunk/hibernatetools/docs/reference/en/modules/codegen.xml trunk/hibernatetools/docs/reference/en/modules/reverseengineering.xml Log: http://jira.jboss.com/jira/browse/JBDS-173 - highlighting code patterns; http://jira.jboss.com/jira/browse/JBDS-238 - making changes according to Sv= etlana remarks; replacing tables with new ones with headers Modified: trunk/hibernatetools/docs/reference/en/modules/codegen.xml =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/hibernatetools/docs/reference/en/modules/codegen.xml 2008-02-13 1= 7:22:22 UTC (rev 6303) +++ trunk/hibernatetools/docs/reference/en/modules/codegen.xml 2008-02-13 1= 7:24:27 UTC (rev 6304) @@ -6,9 +6,10 @@ <hbm2java> or the eclipse plugin to generate POJO java code you have = the possibility to control certain aspects of the code generation. This is primarily done through= the - <meta> - tag in the mapping files. The following section describes the possible= - <meta> tags and their use. + <meta> + tag in the mapping files. The following section describes = the possible + <meta> + tags and their use. =
The <literal><meta></literal> attribute @@ -33,27 +34,27 @@ <meta> attributes and the resulting java code. = - <class name=3D"Person"> - <meta attribute=3D"class-description"> + + Javadoc for the Person class @author Frodo - </meta> - <meta attribute=3D"implements">IAuditable</meta> - <id name=3D"id" type=3D"long"> - <meta attribute=3D"scope-set">protected</meta> - <generator class=3D"increment"/> - </id> - <property name=3D"name" type=3D"string"> - <meta attribute=3D"field-description">The name of the person= </meta> - </property> -</class> + + IAuditable + + protected + + + + The name of the person + +]]> = The above hbm.xml will produce something like the following (code shortene= d for better understanding). Notice the Javadoc comment and the protected set met= hods: = - // default package + +}]]> = Supported meta tags = - + = = @@ -270,8 +271,8 @@ attribute=3D"implements">IAuditable</meta> in = the top of the hbm.xml file, just after - <hibernate-mapping> - . Now all classes defined in that + <hibernate-mapping>. Now al= l classes defined + in that hbm.xml file will implement IAuditable! = @@ -306,48 +307,47 @@ = If we have two entities with a bi-directional association be= tween them and define at class scope level the meta attributes: - use-in-string - , - use-in-equals - : + use-in-string, + + use-in-equals: = - <hibernate-mapping> - <class name=3D"Person"> - <meta attribute=3D"use-in-tostring">true</meta> - <meta attribute=3D"use-in-equals">true</meta> + + + true + true ... - </class> -</hibernate-mapping> + +]]> = And for Event.hbm file: = - <hibernate-mapping> = - <class name=3D"events.Event" table=3D"EVENTS"> - <meta attribute=3D"use-in-tostring">true</meta> - <meta attribute=3D"use-in-equals">true</meta> = = - <id name=3D"id" column=3D"EVENT_ID"> - <generator class=3D"native"/> - </id> - <property name=3D"date" type=3D"timestamp" column=3D"EVENT_DATE"/&g= t; - <property name=3D"title"/> - <set name=3D"participants" table=3D"PERSON_EVENT" inverse=3D"true"&= gt; - <key column=3D"EVENT_ID"/> - <many-to-many column=3D"PERSON_ID" class=3D"events.Person"/> - </set> = - </class> -</hibernate-mapping> + = = + + true + true = + + + + + + + + + = + +]]> = Then <hbm2java> will assume you want to include all properties and c= ollections in the - toString()/equals() = methods and this can - result in infinite recursive calls. + toString()/equals() methods and this can = result in infinite + recursive calls. = To remedy this you have to decide which side of the associat= ion will include the other - part (if at all) in the toString()/equals() - methods. Therefore it is not a good practice to put at class sco= pe such + part (if at all) in the toString()/equals()= methods. Therefore it is + not a good practice to put at class scope such meta attributes, unless you are defining a class without = bi-directional associations. @@ -356,54 +356,54 @@ meta attributes at the property level: = - <hibernate-mapping> = - <class name=3D"events.Event" table=3D"EVENTS"> = - <id name=3D"id" column=3D"EVENT_ID"> - <meta attribute=3D"use-in-tostring">true</meta> - <generator class=3D"native"/> - </id> - <property name=3D"date" type=3D"timestamp" column=3D"EVENT_DATE"/&g= t; - <property name=3D"title"> - <meta attribute=3D"use-in-tostring">true</meta> - <meta attribute=3D"use-in-equals">true</meta> = - </property> - <set name=3D"participants" table=3D"PERSON_EVENT" inverse=3D"true"&= gt; - <key column=3D"EVENT_ID"/> - <many-to-many column=3D"PERSON_ID" class=3D"events.Person"/> - </set> = - </class> -</hibernate-mapping> + = = + = + + true + + + + + true + true = + + + + + = + +]]> = - and now for Person: + and now for Person: = - <hibernate-mapping> - <class name=3D"Person"> - <meta attribute=3D"class-description"> + + + Javadoc for the Person class @author Frodo - </meta> - <meta attribute=3D"implements">IAuditable</meta> - <id name=3D"id" type=3D"long"> - <meta attribute=3D"scope-set">protected</meta> - <meta attribute=3D"use-in-tostring">true</meta> = - <generator class=3D"increment"/> - </id> - <property name=3D"name" type=3D"string"> - <meta attribute=3D"field-description">The name of the person= </meta> - <meta attribute=3D"use-in-tostring">true</meta> - </property> - </class> -</hibernate-mapping> + + IAuditable + + protected + true = + + + + The name of the person + true + + +]]> =
Be aware of putting at class scope level <literal><meta&= gt;</literal> attribute <literal>use-in-equals</literal> = - For equal()/hashCode() method generatio= n, - you have to take into account that the attributes that participa= te on such method - definition, should take into account only attributes with busine= ss meaning (the name, - social security number, etc, but no generated id's, for example)= . + For equal()/hashCode() method generatio= n, you have to take into + account that the attributes that participate on such method defi= nition, should take into + account only attributes with business meaning (the name, social = security number, etc, but + no generated id's, for example). = This is important because Java's hashbased collections, such= as java.util.Set relies on equals(= ) and @@ -411,19 +411,21 @@ this can be a problem if the id gets assigned for an object afte= r you inserted it into a set. = - Therefore automatically configuration the generation of - equals()/hashCode() methods specifying at c= lass scope level the + Therefore automatically configuration of the generation of + equals()/hashCode() methods specifying at= class scope level the <meta> - attribute use-in-equals could be a dangerous decision that - could produce non expected side-effect. + attribute + use-in-equals + could be a dangerous decision that could produce non= expected side-effect. = Here you can get more in-depth - explanation on the subject of equals() and = hashcode(). + explanation on the subject of equals() and + hashcode().
=
- Advanced <emphasis><property><meta></property></emphasi= s> attribute examples + Advanced <meta> attribute examples = This section shows an example for using meta attributes (inclu= ding userspecific attributes) together with the code generation features in Hibernate @@ -438,15 +440,14 @@ With an <meta attribute=3D"class-code">, you can add additional methods on a given class, nevertheless such <meta> - attribute can not be used at property scope level an= d Hibernate + attribute can not be used at a property scope level = and Hibernate Tools does not provide such <meta> attributes. = A possibly solution for this is to modify the freemarker tem= plates responsible for generating the POJO's. If you look inside - hibernate-tools.jar - , you can find the template: + hibernate-tools.jar, you can = find the template: pojo/PojoPropertyAccessor.ftl = @@ -455,14 +456,14 @@ Extract the PojoPropertyAccessor.ftl into a local folder i.e. - ${hbm.template.path} - , respecting the whole path, for example: + ${hbm.template.path}, respect= ing the whole path, for + example: ${hbm.template.path}/pojo/PojoPropertyAccessor.ftl = The contents of the file is something like this: = - <#foreach property in pojo.getAllPropertiesIter= ator()> + ${pojo.getPropertyGetModifiers(property)} = ${pojo.getJavaTypeName(property, jdk5)} = ${pojo.getGetterSignature(property)}() { @@ -474,12 +475,12 @@ { this.${property.name} =3D ${property.name}; } -</#foreach> +]]> = We can add conditionally pre/post-conditions on our set method generation just adding a little Freemarker syntax to the above s= ource code: = - <#foreach property in pojo.getAllPropertiesIter= ator()> + ${pojo.getPropertyGetModifiers(property)} = ${pojo.getJavaTypeName(property, jdk5)} = ${pojo.getGetterSignature(property)}() @@ -490,84 +491,87 @@ ${pojo.getPropertySetModifiers(property)} void set${pojo.getPropertyNa= me(property)} (${pojo.getJavaTypeName(property, jdk5)} ${property.name}) = { - <#if pojo.hasMetaAttribute(property, "pre-cond")> = + <#if pojo.hasMetaAttribute(property, "pre-cond")> = ${c2j.getMetaAsString(property, "pre-cond","\n")} = - </#if> = + = this.${property.name} =3D ${property.name}; - <#if pojo.hasMetaAttribute(property, "post-cond")> = + <#if pojo.hasMetaAttribute(property, "post-cond")> = ${c2j.getMetaAsString(property, "post-cond","\n")} = - </#if> = + = } -</#foreach> +]]> = Now if in any - *hbm.xml + .hbm.xml file we define the <meta> attributes: pre-cond or = post-cond, their contents will be generated into the body of the relevant set method. = As an example let us add a pre-condition for property name - preventing no Person can have an empty name. = So we have to modify the + preventing no Person can have an empty name= . So we have to modify the Person.hbm.xml file like this: = - <hibernate-mapping> - <class name=3D"Person"> - <id name=3D"id" type=3D"long"> = - <generator class=3D"increment"/> - </id> - <property name=3D"firstName" type=3D"string"> - <meta attribute=3D"pre-cond"><![CDATA[ + + + = + + + + if ((firstName !=3D null) && (firstName.length() =3D=3D 0) )= { throw new IllegalArgumentException("firstName can not be an empty = String"); - }]]> - </meta> - </property> -</class> -</hibernate-mapping> + } + + + +]]> = - I) If you don'' use <[[CDATA[]]> you have - to scape the & symbol, i.e.: &amp; - II). Note that we are referring to "firstName" directly an= d this is the parameter + I) To scape the & symbol we put &amp;. You can use + <![CDATA[]]> instead. + II) Note that we are referring to "firstName" directly and= this is the parameter name not the actual field name. If you want to refer the field= you have to use "this.firstName" instead. = - Finally we have to generate the Person.java class, for this we - can use both Eclipse and Ant as long as you remember to set or f= ill in the templatepath - setting. For Ant we configure + Finally we have to generate the + Person.java + class, for this we can use both Eclipse and Ant as l= ong as you remember to set + or fill in the templatepath setting. For Ant we configure <hibernatetool> task via the templatepath attribu= te as in: = - - <target name=3D"hbm2java"> - <taskdef name=3D"hibernatetool" + + + classpathref=3D"lib.classpath"/> + + + + = + + + + + + + + ]]> = Invoking the target <hbm2java> will generate on the ${hbm2java.dest.dir} - the file Person.java: + the file + Person.java + : = - // default package + +}]]> =
+ To find additional information about Hibernate Tools we suggest that you + visit our website. If you have questions, you are always welcome in our + forum. Modified: trunk/hibernatetools/docs/reference/en/modules/reverseengineering= .xml =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/hibernatetools/docs/reference/en/modules/reverseengineering.xml 2= 008-02-13 17:22:22 UTC (rev 6303) +++ trunk/hibernatetools/docs/reference/en/modules/reverseengineering.xml 2= 008-02-13 17:24:27 UTC (rev 6304) @@ -3,10 +3,9 @@ Controlling reverse engineering = When using the - <jdbcconfiguration> - the ant task will read the database metadata and from that= will perform a reverse - engineering of the database schema into a normal Hibernate Configurati= on. It is from this object - e.g. + <jdbcconfiguration>, the ant = task will read the + database metadata and thus will perform a reverse engineering of the d= atabase schema into a + normal Hibernate Configuration. It is from this object e.g. <hbm2java> can generate other artifacts such as .java @@ -22,6 +21,9 @@ not enough, or simply just provide a small part of the strategy and de= legate the rest to the default strategy. = + Thus, further in this chapter we will discuss how you can configur= e the process of a reverse + engineering, what default reverse engineering strategy includes as well = as some custom concepts. + =
Default reverse engineering strategy = @@ -38,19 +40,20 @@ hibernate.reveng.xml file can be provided. In this file you can specify type = mappings and table filtering. This file can be created by hand (it's just basic XM= L) or you can use the - Hibernate plugins which have a specialized editor. + Hibernate plugins<= /ulink> which have a + specialized editor. = Many databases are case-sensitive with their names and thus if= you cannot make some - table match and you are sure it is not excluded by a <table-fil= ter>then check + table match and you are sure it is not excluded by a <table-fil= ter> then check if the case matches; most databases stores table names in uppercas= e. = - The following is an example of a - reveng.xml - . Following the example gives you more details about the = format. + Below you can see an example of a + reveng.xml. Following the example= gives you more details + about the format. = - + = @@ -102,7 +105,7 @@ = <schema-selection> - is used to drive which schema's the reverse engin= eering will try and + is used to drive which schemas the reverse engineering= will try and process. = By default the reverse engineering will read all schemas and t= hen use @@ -120,8 +123,7 @@ If no <schema-selection> is specifi= ed, the reverse engineering works as if all schemas should be processed. This is= equal to: - ]]>. Which in turn is equal - to: + ]]>. Which in turn is equal to: ]]> = @@ -129,24 +131,24 @@ Examples = The following will process all tables from - "MY_SCHEMA" - . + "MY_SCHEMA". + = - ]]> + ]]> = It is possible to have multiple schema-selection's to support multi-schema reading or simply to limit the processing to very s= pecific tables. The following example processes all tables in - "MY_SCHEMA" - , a specific + "MY_SCHEMA", + a specific "CITY" table plus all tables that starts with "CODES_" in - COMMON_SCHEMA" - . + "COMMON_SCHEMA". + = - + ]]>
@@ -158,11 +160,14 @@ The <type-mapping> section specifies how the JDBC types found in the data= base should be mapped to - Hibernate types. e.g. java.sql.Types.VARCHAR with a length of 1 sh= ould be mapped to the - Hibernate type yes_no or java.sql.Types.NUMERIC= should generally just be + Hibernate types. e.g. + java.sql.Types.VARCHAR with a le= ngth of 1 should be mapped to the + Hibernate type + yes_no or + java.sql.Types.NUMERIC should = generally just be converted to the Hibernate type long. = - + The following is an example of a type-mapping which shows th= e flexibility and the importance of ordering of the type mappings. = - + @@ -195,26 +200,27 @@ ]]> = - The following table shows how this affects an example table = named CUSTOMER: + The following table shows how this affects an example table = named + CUSTOMER: =
sql-type examples = - + = - + = = - + = = - - = + + Column @@ -351,51 +357,83 @@ tables, e.g. let you include or exclude specific tables based on t= he schema or even a specific prefix. = - - - - - - - - - - - - - - ]]> - - - - match-catalog (default: .*): Pattern for matching catalo= g part of the table - - - - match-schema (default: .*): Pattern for matching schema = part of the table - - - - match-table (default: .*): Pattern for matching table pa= rt of the table - - - - exclude (default: false): if true the table will not be = part of the reverse - engineering - - - - package (default: ""): The default package name to use f= or classes based on tables - matched by this table-filter - - - + = +
+ Table-filter attributes + = + + = + = + = + + = + + = + = + + + Attribute name + = + Definition + = + Default value + + + = + + + match-catalog + = + Pattern for matching catalog part of the tabl= e + = + .* + + = + + match-schema + = + Pattern for matching schema part of the table= + = + .* + + = + + match-table + = + Pattern for matching table part of the table<= /para> + = + .* + + = + + exclude + = + If true the table will not be part of the rev= erse + engineering + = + false + + = + + package + = + The default package name to use for classes b= ased on tables + matched by this table-filter + = + "" + + + = + +
+ =
=
@@ -404,21 +442,10 @@ <table> allows you to provide explicit configuration on how a = table should be reverse - engineered. Amongst other things it allows controlling over the na= ming of a class for the table, - specifying which identifier generator should be used for the prima= ry key etc. + engineered. Amongst other things it allows controlling over the na= ming of a class for the + table, specifying which identifier generator should be used for th= e primary key etc. = - - - - - - - - - - - - -]]> + ]]> + = + + Table attributes + = + + = + = + = + + = + + = + = + + + Attribute name + = + Definition + = + Attribute use + + + = + + + catalog + = + Catalog name for a table. It has to be specifie= d if you are + reverse engineering multiple catalogs or if it is not equa= l to + hiberante.default_catalog. + = + Optional + + = + + schema + = + Schema name for a table. It has to be specified= if you are + reverse engineering multiple schemas or if it is not equal= to + hiberante.default_schema. + = + Optional + + = + + name + = + Name for a table. + = + Required + + = + + class + = + The class name for a table. Default name is a c= amelcase version + of the table name. + = + Optional + + = + + = + +
= = - - - catalog (Optional): Catalog name for a table. It has to = be specified if you are reverse - engineering multiple catalogs or if it is not equal to - hiberante.default_catalog. - - - - schema (Optional): Schema name for a table. It has to be= specified if you are reverse - engineering multiple schemas or if it is not equal to - hiberante.default_schema. - - - - name (Required): Name for a table - - - - clase (Optional): The class name for a table. Default na= me is a camelcase version of - the table name. - - -
-
<primary-key> = A <primary-key> - allows you to define a primary-key for tables that d= on't have such defined - in the database, and probably more importantly it allows you to = define which identifier - strategy should be used (even for already existing primary-key's= ). + allows you to define a primary-key for tables that d= on't have it + defined in the database, and probably more importantly it allows= you to define which + identifier strategy should be used (even for already existing pr= imary-key's). = - - - - - - - - - - parameter value -]]> + ]]> + = + + Primary-key attributes + = + + = + = + = + + = + + = + = + + + Attribute name + = + Definition + = + Attribute use + + + = + + + generator/class + = + Defines which identifier generator should be = used. + The class name is any hibernate short hand name or fully= qualified class name for an + identifier strategy. + = + Optional + + = + + generator/param + = + Allows to specify which parameter with a name= and + value should be passed to the identifier generator. + = + Optional + + = + + key-column + = + Specifies which column(s ) the primary-key co= nsists of. A + key-column is same as column, but does not have the excl= ude property. + = + Optional + + = + + = + +
= = - - - generator/class (Optional): defines which identifier g= enerator should be used. - The class name is any hibernate short hand name or fully q= ualified class name for an - identifier strategy. - - - - generator/param (Optional): Allows to specify which pa= rameter with a name and - value should be passed to the identifier generator - - - - key-column (Optional): Specifies which column(s ) the = primary-key consists of. A - key-column is same as column, but does not have the exclud= e property. - - -
=
@@ -504,24 +601,10 @@ With a <column> it is possible to explicitly name the resulting prop= erty for a column. It is - also possible to redefine what jdbc and/or Hibernate type a colu= mn should be processed as and - finally it is possible to completely exclude a column from proce= ssing. - - - - - - - - - - - - - - - - + = + ]]> = - - - name (Required): Column name - - - - jdbc-type (Optional): Which jdbc-type this column sh= ould be processed as. A + + Column attributes + = + + = + = + = + + = + + = + = + + + Attribute name + = + Definition + = + Attribute use + + + = + + + name + = + Column name. + = + Required + + = + + jdbc-type + = + Which jdbc-type this column should be process= ed as. A value from java.sql.Types, either numerical (93) or the = constant name - (TIMESTAMP). - - - - type (Optional): Which hibernate-type to use for thi= s specific column - - - - property (Optional): What property name will be gene= rated for this - column - - - - exclude (default: false): set to true if this column= should be ignored - - - - + (TIMESTAMP). + = + Optional + + = + + type + = + Which hibernate-type to use for this specific= column. + = + Optional + + = + = + + property + = + What property name will be generated for this + column. + = + Optional + + = + + exclude + = + Set to true if this column should be ignored.= + = + default: false + + = + + = + +
= + =
=
@@ -568,25 +697,7 @@ = Note: = - - - - - - - - - - - - - - - - - - - -]]> - - - - constraint-name (Required): Name of the foreign key = constraint. Important when + ]]> + = + + Foreign-key attributes + = + + = + = + = + + = + + = + = + + + Attribute name + = + Definition + = + Attribute use + + + = + + + constraint-name + = + Name of the foreign key constraint. Important= when naming many-to-one and set. It is the constraint-name th= at is used to link the - processed foreign-keys with the resulting property names= . - - - - foreign-catalog (Optional): Name of the foreign tabl= e's catalog. (Only - relevant if you want to explicitly define a foreign key)= . - - - - foreign-schema (Optional): Name of the foreign table= 's schema. (Only relevant - if you want to explicitly define a foreign key). - - - - foreign-table (Optional): Name of the foreign table.= (Only relevant if you - want to explicitly define a foreign key). - - - - column-ref (Optional): Defines that the foreign-key = constraint between a + processed foreign-keys with the resulting property names= . + = + Required + + = + + foreign-catalog + = + Name of the foreign table's catalog. (Only + relevant if you want to explicitly define a foreign key)= . + = + Optional + + = + + foreign-schema + = + Name of the foreign table's schema. (Only rel= evant + if you want to explicitly define a foreign key).<= /entry> + = + Optional + + = + = + + foreign-table + = + Name of the foreign table. (Only relevant if = you + want to explicitly define a foreign key). + = + Optional + + = + + column-ref + = + Defines that the foreign-key constraint betwe= en a local-column and foreign-column name. (Only relevant if = you want to explicitly - define a foreign key). - - - - many-to-one (Optional): Defines that a many-to-one s= hould be created and the + define a foreign key). + = + Optional + + = + + many-to-one + = + Defines that a many-to-one should be created = and the property attribute specifies the name of the resulting p= roperty. Exclude can be - used to explicitly define that it should be created or n= ot. - - - - set (Optional): Defines that a set should be created= based on this foreign-key + used to explicitly define that it should be created or n= ot. + = + Optional + + = + + set + = + Defines that a set should be created based on= this foreign-key and the property attribute specifies the name of the res= ulting (set) property. - Exclude can be used to explicitly define that it should = be created or not. - - - - + Exclude can be used to explicitly define that it should = be created or not. + = + Optional + + + = + +
= + =
@@ -650,19 +814,19 @@
Custom strategy = - It is possible to implement an user strategy. Such strategy must= implement - org.hibernate.cfg.reveng.ReverseEngineeringStrategy - . It is recommended that one uses the + It is possible to implement a user strategy. Such strategy must = implement + org.hibernate.cfg.reveng.ReverseEngineeringStrategy. + It is recommended that one uses the DelegatingReverseEngineeringStrategy and prov= ide a public constructor - which takes another ReverseEngineeringStrategy = as argument. This will + which takes another ReverseEngineeringStrategy = as an argument. This will allow you to only implement the relevant methods and provide a fallb= ack strategy. Example of custom delegating strategy which converts all column names that ends= with "PK" into a property named - "id" - . + "id". + = - org.hibernate.cfg.reveng.dialect.JDBCMetaDataDialect which is an implementation of - org.hibernate.cfg.reveng.dialect.MetaDataDialect - . + org.hibernate.cfg.reveng.dialect.MetaDataDialect. + = The default implementation can be replaced with an alternative i= mplementation by setting the property --===============7286471117675989010==--