From eef672b6b060647378862b8417fce1e8d3b86427 Mon Sep 17 00:00:00 2001 From: Alexander Bryantsev Date: Sat, 9 Feb 2019 15:32:03 +0300 Subject: [PATCH 1/3] Oracle metadata of columns includes all forms of TIMESTAMP datatype now. --- .../cfg/reveng/dialect/OracleMetaDataDialect.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/java/org/hibernate/cfg/reveng/dialect/OracleMetaDataDialect.java b/src/java/org/hibernate/cfg/reveng/dialect/OracleMetaDataDialect.java index 8d3b7fd782..4ffcd541d3 100644 --- a/src/java/org/hibernate/cfg/reveng/dialect/OracleMetaDataDialect.java +++ b/src/java/org/hibernate/cfg/reveng/dialect/OracleMetaDataDialect.java @@ -104,11 +104,14 @@ public OracleMetaDataDialect() { + "'CHAR', a.char_length, " + "'NCHAR', a.char_length, " + "a.data_length) as COLUMN_SIZE, " - + "decode(a.data_type,'CHAR',1, 'DATE',91, 'FLOAT',6, " - + "'LONG',-1, 'NUMBER',2, 'VARCHAR2',12, 'BFILE',-13, " - + "'BLOB',2004, 'CLOB',2005, 'MLSLABEL',1111, 'NCHAR',1, 'NCLOB',2005, 'NVARCHAR2',12, " - + "'RAW',-3, 'ROWID',1111, 'UROWID',1111, 'LONG RAW', -4, " - + "'TIMESTAMP', 93, 'TIMESTAMP(6)', 93, 'XMLTYPE',2005, 1111) as DATA_TYPE, " + + "CASE\n" + + " WHEN a.data_type LIKE 'TIMESTAMP%' THEN\n" + + " 93\n" + + " ELSE\n" + + " decode(a.data_type, 'CHAR', 1, 'DATE', 91, 'FLOAT', 6, 'LONG', -1, 'NUMBER', 2, 'VARCHAR2', 12, 'BFILE', -13,\n" + + " 'BLOB', 2004, 'CLOB', 2005, 'MLSLABEL', 1111, 'NCHAR', 1, 'NCLOB', 2005, 'NVARCHAR2', 12, 'RAW', -3,\n" + + " 'ROWID', 1111, 'UROWID', 1111, 'LONG RAW', -4, 'XMLTYPE', 2005, 1111)\n" + + "END AS data_type\n," + "a.table_name as TABLE_NAME, a.data_type as TYPE_NAME, " + "decode(a.data_scale, null, 0 ,a.data_scale) as DECIMAL_DIGITS, b.comments " + "from all_tab_columns a left join all_col_comments b on " From 3af05900511609e4f58c5f22bd2fc8ea2d94cc6b Mon Sep 17 00:00:00 2001 From: Alexander Bryantsev Date: Sat, 9 Feb 2019 16:08:02 +0300 Subject: [PATCH 2/3] Oracle metadata queries were optimized (tested at Oracle 9.2) --- .../reveng/dialect/OracleMetaDataDialect.java | 145 +++++++++++------- 1 file changed, 88 insertions(+), 57 deletions(-) diff --git a/src/java/org/hibernate/cfg/reveng/dialect/OracleMetaDataDialect.java b/src/java/org/hibernate/cfg/reveng/dialect/OracleMetaDataDialect.java index 4ffcd541d3..33b8dd8a8a 100644 --- a/src/java/org/hibernate/cfg/reveng/dialect/OracleMetaDataDialect.java +++ b/src/java/org/hibernate/cfg/reveng/dialect/OracleMetaDataDialect.java @@ -31,9 +31,13 @@ public OracleMetaDataDialect() { /* ******* TABLE QUERIES ******* */ private static final String SQL_TABLE_BASE = - "select a.table_name, a.owner, b.comments, 'TABLE' " - + "from all_tables a left join all_tab_comments b " - + "on (a.owner=b.owner and a.table_name=b.table_name) "; + "select a.table_name, a.owner, " + + "(SELECT b.comments\n" + + " FROM all_tab_comments b\n" + + " WHERE a.owner = b.owner\n" + + " AND a.table_name = b.table_name) AS comments, " + + "'TABLE' " + + "from all_tables a "; private static final String SQL_TABLE_VIEW = " union all select view_name, owner, NULL, 'VIEW' from all_views "; @@ -46,9 +50,11 @@ public OracleMetaDataDialect() { private static final String SQL_TABLE_TABLE = SQL_TABLE_BASE + "where a.table_name like ?" + SQL_TABLE_VIEW + "where view_name like ?"; - private static final String SQL_TABLE_SCHEMA_AND_TABLE = SQL_TABLE_BASE - + "where a.owner like ? and a.table_name like ?" + SQL_TABLE_VIEW - + "where owner like ? and view_name like ?"; + private static final String SQL_TABLE_SCHEMA_AND_TABLE = + SQL_TABLE_BASE + + "where a.owner like ? and a.table_name like ?" + + SQL_TABLE_VIEW + + "where owner like ? and view_name like ?"; private PreparedStatement prepTableNone; @@ -61,14 +67,19 @@ public OracleMetaDataDialect() { /* ***************************** */ /* ******* INDEX QUERIES ******* */ /* ***************************** */ - private static final String SQL_INDEX_BASE = "select a.column_name, " - + "decode(b.uniqueness,'UNIQUE','false','true'), " - + "a.index_owner, a.index_name, a.table_name " - + "from all_ind_columns a left join all_indexes b on " - + "(a.table_name = b.table_name " - + " AND a.table_owner = b.table_owner " - + " AND a.index_name = b.index_name) " - + "where b.index_type not like 'FUNCTION-BASED%' "; + private static final String SQL_INDEX_BASE = + "SELECT a.column_name\n" + + " ,decode((SELECT b.uniqueness\n" + + " FROM all_indexes b\n" + + " WHERE a.table_name = b.table_name\n" + + " AND a.table_owner = b.table_owner\n" + + " AND a.index_name = b.index_name\n" + + " AND b.index_type NOT LIKE 'FUNCTION-BASED%'), 'UNIQUE', 'false', 'true') AS uniqueness\n" + + " ,a.index_owner\n" + + " ,a.index_name\n" + + " ,a.table_name\n" + + " FROM all_ind_columns a\n " + + " WHERE 1 = 1\n "; private static final String SQL_INDEX_ORDER = " order by a.table_name, a.column_position"; @@ -93,29 +104,30 @@ public OracleMetaDataDialect() { private PreparedStatement prepIndexSchemaAndTable; /* ****** COLUMN QUERIES ******* */ - private static final String SQL_COLUMN_BASE = "select a.column_name as COLUMN_NAME, a.owner as TABLE_SCHEM, " - + "decode(a.nullable,'N',0,1) as NULLABLE, " - + "decode(a.data_type, " - + "'FLOAT', decode(a.data_precision, null, a.data_length, a.data_precision), " - + "'NUMBER', decode(a.data_precision, null, a.data_length, a.data_precision), " - + "'VARCHAR2', a.char_length, " - + "'VARCHAR', a.char_length, " - + "'NVARCHAR2', a.char_length, " - + "'CHAR', a.char_length, " - + "'NCHAR', a.char_length, " - + "a.data_length) as COLUMN_SIZE, " - + "CASE\n" - + " WHEN a.data_type LIKE 'TIMESTAMP%' THEN\n" - + " 93\n" - + " ELSE\n" - + " decode(a.data_type, 'CHAR', 1, 'DATE', 91, 'FLOAT', 6, 'LONG', -1, 'NUMBER', 2, 'VARCHAR2', 12, 'BFILE', -13,\n" - + " 'BLOB', 2004, 'CLOB', 2005, 'MLSLABEL', 1111, 'NCHAR', 1, 'NCLOB', 2005, 'NVARCHAR2', 12, 'RAW', -3,\n" - + " 'ROWID', 1111, 'UROWID', 1111, 'LONG RAW', -4, 'XMLTYPE', 2005, 1111)\n" - + "END AS data_type\n," - + "a.table_name as TABLE_NAME, a.data_type as TYPE_NAME, " - + "decode(a.data_scale, null, 0 ,a.data_scale) as DECIMAL_DIGITS, b.comments " - + "from all_tab_columns a left join all_col_comments b on " - + "(a.owner=b.owner and a.table_name=b.table_name and a.column_name=b.column_name) "; + private static final String SQL_COLUMN_BASE = + "SELECT a.column_name AS COLUMN_NAME\n" + + " ,a.owner AS TABLE_SCHEM\n" + + " ,decode(a.nullable, 'N', 0, 1) AS NULLABLE\n" + + " ,decode(a.data_type, 'FLOAT', decode(a.data_precision, NULL, a.data_length, a.data_precision), 'NUMBER',\n" + + " decode(a.data_precision, NULL, a.data_length, a.data_precision), 'VARCHAR2', a.char_length, 'VARCHAR',\n" + + " a.char_length, 'NVARCHAR2', a.char_length, 'CHAR', a.char_length, 'NCHAR', a.char_length, a.data_length) AS COLUMN_SIZE\n" + + " ,CASE\n" + + " WHEN a.data_type LIKE 'TIMESTAMP%' THEN\n" + + " 93\n" + + " ELSE\n" + + " decode(a.data_type, 'CHAR', 1, 'DATE', 91, 'FLOAT', 6, 'LONG', -1, 'NUMBER', 2, 'VARCHAR2', 12, 'BFILE', -13,\n" + + " 'BLOB', 2004, 'CLOB', 2005, 'MLSLABEL', 1111, 'NCHAR', 1, 'NCLOB', 2005, 'NVARCHAR2', 12, 'RAW', -3,\n" + + " 'ROWID', 1111, 'UROWID', 1111, 'LONG RAW', -4, 'XMLTYPE', 2005, 1111)\n" + + " END AS DATA_TYPE\n" + + " ,a.table_name AS TABLE_NAME\n" + + " ,a.data_type AS TYPE_NAME\n" + + " ,decode(a.data_scale, NULL, 0, a.data_scale) AS DECIMAL_DIGITS\n" + + " ,(SELECT b.comments\n" + + " FROM all_col_comments b\n" + + " WHERE a.owner = b.owner\n" + + " AND a.table_name = b.table_name\n" + + " AND a.column_name = b.column_name) AS COMMENTS\n" + + " FROM all_tab_columns a\n"; private static final String SQL_COLUMN_ORDER = " order by column_id "; @@ -164,8 +176,9 @@ public OracleMetaDataDialect() { /* ***************************** */ /* ******** PK QUERIES ********* */ /* ***************************** */ - private static final String SQL_PK_BASE = "select c.table_name, c.column_name, c.position, c.constraint_name, " - + "c.owner from all_cons_columns c left join all_constraints k on " + private static final String SQL_PK_BASE = + "select c.table_name, c.column_name, c.position, c.constraint_name, " + + "c.owner from all_cons_columns c join all_constraints k on " + "(k.owner = c.owner AND k.table_name = c.table_name AND k.constraint_name = c.constraint_name) " + "where k.constraint_type = 'P' "; @@ -193,16 +206,37 @@ public OracleMetaDataDialect() { /* ***************************** */ /* ******** FK QUERIES ********* */ /* ***************************** */ - private static final String SQL_FK_BASE = "select p.table_name, p.owner, f.owner, f.table_name, " - + "fc.column_name, pc.column_name, f.constraint_name, fc.position " - + "from all_constraints p left join all_cons_columns pc on " - + "(pc.owner = p.owner and pc.constraint_name = p.constraint_name and pc.table_name = p.table_name) " - + "left join all_constraints f on (p.owner = f.r_owner and p.constraint_name = f.r_constraint_name) " - + "left join all_cons_columns fc on " - + "(fc.owner = f.owner and fc.constraint_name = f.constraint_name and fc.table_name = f.table_name and" - + " fc.position = pc.position) where f.constraint_type = 'R' AND p.constraint_type = 'P' "; - - private static final String SQL_FK_ORDER = " order by f.table_name, f.constraint_name, fc.position "; + private static final String SQL_FK_BASE = + "SELECT p.table_name as p_table_name\n" + + " ,p.owner as p_owner\n" + + " ,f.owner as f_owner\n" + + " ,f.table_name as f_table_name\n" + + " ,(SELECT fc.column_name\n" + + " FROM all_cons_columns fc\n" + + " WHERE fc.owner = f.owner\n" + + " AND fc.constraint_name = f.constraint_name\n" + + " AND fc.table_name = f.table_name\n" + + " AND fc.position = pc.position) AS fc_column_name\n" + + " ,pc.column_name as pc_column_name\n" + + " ,f.constraint_name\n" + + " ,(SELECT fc.position\n" + + " FROM all_cons_columns fc\n" + + " WHERE fc.owner = f.owner\n" + + " AND fc.constraint_name = f.constraint_name\n" + + " AND fc.table_name = f.table_name\n" + + " AND fc.position = pc.position) AS fc_position\n" + + " FROM all_constraints p\n" + + " JOIN all_cons_columns pc\n" + + " ON pc.owner = p.owner\n" + + " AND pc.constraint_name = p.constraint_name\n" + + " AND pc.table_name = p.table_name\n" + + " JOIN all_constraints f\n" + + " ON p.owner = f.r_owner\n" + + " AND p.constraint_name = f.r_constraint_name\n" + + " WHERE f.constraint_type = 'R'\n" + + " AND p.constraint_type = 'P'\n"; + + private static final String SQL_FK_ORDER = " order by f.table_name, f.constraint_name, position "; private static final String SQL_FK_NONE = SQL_FK_BASE + SQL_FK_ORDER; @@ -228,8 +262,7 @@ public Iterator> getTables(final String catalog, final String try { log.debug("getTables(" + catalog + "." + schema + "." + table + ")"); - ResultSet tableRs; - tableRs = getTableResultSet( schema, table ); + ResultSet tableRs = getTableResultSet( schema, table ); return new ResultSetIterator(null, tableRs, getSQLExceptionConverter()) { @@ -244,7 +277,7 @@ protected Map convertRow(ResultSet tableResultSet) element.put("TABLE_SCHEM", tableResultSet.getString(2)); element.put("TABLE_CAT", null); element.put("TABLE_TYPE", tableResultSet.getString(4)); - element.put("REMARKS", tableResultSet.getString(3)); + element.put("REMARKS", tableResultSet.getString(3)); log.info( element.toString() ); return element; } @@ -312,7 +345,7 @@ protected Throwable handleSQLException(SQLException e) { throw getSQLExceptionConverter().convert( e, "Exception while getting index info for " - + TableNameQualifier.qualify(catalog, schema, table), null); + + TableNameQualifier.qualify(catalog, schema, table) + ": " + e.getMessage(), null); } } @@ -412,8 +445,7 @@ public Iterator> getExportedKeys(final String catalog, final log.debug("getExportedKeys(" + catalog + "." + schema + "." + table + ")"); - ResultSet pExportRs; - pExportRs = getExportedKeysResultSet( schema, table ); + ResultSet pExportRs = getExportedKeysResultSet( schema, table ); return new ResultSetIterator(null, pExportRs, getSQLExceptionConverter()) { @@ -576,8 +608,7 @@ private ResultSet getExportedKeysResultSet(final String schema, final String tab prepFkNone = con .prepareStatement(SQL_FK_NONE); prepFkSchema = con.prepareStatement(SQL_FK_SCHEMA); prepFkTable = con.prepareStatement(SQL_FK_TABLE); - prepFkSchemaAndTable = con - .prepareStatement(SQL_FK_SCHEMA_AND_TABLE); + prepFkSchemaAndTable = con.prepareStatement(SQL_FK_SCHEMA_AND_TABLE); log.debug(" foreign key queries prepared!"); } From 9895f5aff13375f311c554c79b47263e30fc16ec Mon Sep 17 00:00:00 2001 From: Alexander Bryantsev Date: Sat, 9 Feb 2019 16:23:51 +0300 Subject: [PATCH 3/3] Added param "annotateFields" to config of hibernatetool plugin. If value of param is set to true then annotates will be generated above class fields instead of field getters. Added param "javaDocFromDbComments" to config of hibernatetool plugin. If value of param is set to true then comments of tables and their fields will be added as class and their fields javadoc description. Meta-attributes of class and fields (class-description and field-description) has priority if set. --- .../org/hibernate/cfg/reveng/RevEngUtils.java | 32 +++++++++++-- .../tool/ant/Hbm2JavaExporterTask.java | 18 ++++++- .../tool/hbm2x/MetaAttributeConstants.java | 3 ++ .../hibernate/tool/hbm2x/POJOExporter.java | 6 +++ .../tool/hbm2x/pojo/BasicPOJOClass.java | 47 +++++++++++++++---- src/templates/pojo/PojoFields.ftl | 6 +-- src/templates/pojo/PojoPropertyAccessors.ftl | 6 +-- src/templates/pojo/PojoTypeDeclaration.ftl | 2 +- 8 files changed, 98 insertions(+), 22 deletions(-) diff --git a/src/java/org/hibernate/cfg/reveng/RevEngUtils.java b/src/java/org/hibernate/cfg/reveng/RevEngUtils.java index f52091194f..19386f8cfd 100644 --- a/src/java/org/hibernate/cfg/reveng/RevEngUtils.java +++ b/src/java/org/hibernate/cfg/reveng/RevEngUtils.java @@ -1,14 +1,20 @@ package org.hibernate.cfg.reveng; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; +import org.hibernate.mapping.Column; import org.hibernate.mapping.MetaAttribute; import org.hibernate.mapping.Table; public class RevEngUtils { - public static List getPrimaryKeyInfoInRevengStrategy( + public static final String CLASS_DB_DESCRIPTION = "class-db-description"; + public static final String FIELD_DB_DESCRIPTION = "field-db-description"; + + public static List getPrimaryKeyInfoInRevengStrategy( ReverseEngineeringStrategy revengStrat, Table table, String defaultCatalog, @@ -57,7 +63,9 @@ public static Map getColumnToMetaAttributesInRevengStrateg tableIdentifier = new TableIdentifier(catalog, schema, table.getName()); result = revengStrat.columnToMetaAttributes(tableIdentifier, column); } - return result; + + Column col = table.getColumn(new Column(column)); + return putMetaAttributeDbDescription(result, FIELD_DB_DESCRIPTION, col == null ? null : col.getComment()); } public static Map getTableToMetaAttributesInRevengStrategy( @@ -74,10 +82,24 @@ public static Map getTableToMetaAttributesInRevengStrategy tableIdentifier = new TableIdentifier(catalog, schema, table.getName()); result = revengStrat.tableToMetaAttributes(tableIdentifier); } - return result; + + return putMetaAttributeDbDescription(result, CLASS_DB_DESCRIPTION, table.getComment()); } - - public static String getColumnToPropertyNameInRevengStrategy( + + private static Map putMetaAttributeDbDescription(Map map, + String metaAttributeName, String description) { + if (metaAttributeName != null && description != null) { + if (map == null) { + map = new HashMap<>(); + } + List comment = new ArrayList<>(); + comment.add(new SimpleMetaAttribute(description, true)); + map.put(metaAttributeName, MetaAttributeBinder.toRealMetaAttribute(metaAttributeName, comment)); + } + return map; + } + + public static String getColumnToPropertyNameInRevengStrategy( ReverseEngineeringStrategy revengStrat, Table table, String defaultCatalog, diff --git a/src/java/org/hibernate/tool/ant/Hbm2JavaExporterTask.java b/src/java/org/hibernate/tool/ant/Hbm2JavaExporterTask.java index 0b31df229d..7cc2d3cb6c 100644 --- a/src/java/org/hibernate/tool/ant/Hbm2JavaExporterTask.java +++ b/src/java/org/hibernate/tool/ant/Hbm2JavaExporterTask.java @@ -17,6 +17,10 @@ public class Hbm2JavaExporterTask extends ExporterTask { boolean jdk5 = false; + boolean annotateFields = false; + + boolean javaDocFromDbComments = false; + public Hbm2JavaExporterTask(HibernateToolTask parent) { super( parent ); } @@ -29,11 +33,21 @@ public void setJdk5(boolean b) { jdk5 = b; } - protected Exporter configureExporter(Exporter exp) { + public void setAnnotateFields(boolean annotateFields) { + this.annotateFields = annotateFields; + } + + public void setJavaDocFromDbComments(boolean javaDocFromDbComments) { + this.javaDocFromDbComments = javaDocFromDbComments; + } + + protected Exporter configureExporter(Exporter exp) { POJOExporter exporter = (POJOExporter) exp; super.configureExporter( exp ); - exporter.getProperties().setProperty("ejb3", ""+ejb3); + exporter.getProperties().setProperty("ejb3", "" + ejb3); exporter.getProperties().setProperty("jdk5", ""+jdk5); + exporter.getProperties().setProperty("annotateFields", "" + annotateFields); + exporter.getProperties().setProperty("javaDocFromDbComments", "" + javaDocFromDbComments); return exporter; } diff --git a/src/java/org/hibernate/tool/hbm2x/MetaAttributeConstants.java b/src/java/org/hibernate/tool/hbm2x/MetaAttributeConstants.java index 891566f1a1..00b5108722 100644 --- a/src/java/org/hibernate/tool/hbm2x/MetaAttributeConstants.java +++ b/src/java/org/hibernate/tool/hbm2x/MetaAttributeConstants.java @@ -7,6 +7,9 @@ public interface MetaAttributeConstants { static final String CLASS_MODIFIER = "class-modifier"; static final String SCOPE_CLASS = "scope-class"; static final String CLASS_DESCRIPTION = "class-description"; + static final String CLASS_DB_DESCRIPTION = "class-db-description"; + static final String FIELD_DESCRIPTION = "field-description"; + static final String FIELD_DB_DESCRIPTION = "field-db-description"; static final String IMPLEMENTS = "implements"; static final String EXTENDS = "extends"; static final String GEN_PROPERTY = "gen-property"; // in templates. diff --git a/src/java/org/hibernate/tool/hbm2x/POJOExporter.java b/src/java/org/hibernate/tool/hbm2x/POJOExporter.java index 2d255c0d18..66cda22308 100644 --- a/src/java/org/hibernate/tool/hbm2x/POJOExporter.java +++ b/src/java/org/hibernate/tool/hbm2x/POJOExporter.java @@ -41,6 +41,12 @@ protected void setupContext() { if(!getProperties().containsKey("jdk5")) { getProperties().put("jdk5", "false"); } + if(!getProperties().containsKey("annotateFields")) { + getProperties().put("annotateFields", "false"); + } + if(!getProperties().containsKey("javaDocFromDbComments")) { + getProperties().put("javaDocFromDbComments", "false"); + } super.setupContext(); } } diff --git a/src/java/org/hibernate/tool/hbm2x/pojo/BasicPOJOClass.java b/src/java/org/hibernate/tool/hbm2x/pojo/BasicPOJOClass.java index 76eceba71a..9bcfbc5adf 100644 --- a/src/java/org/hibernate/tool/hbm2x/pojo/BasicPOJOClass.java +++ b/src/java/org/hibernate/tool/hbm2x/pojo/BasicPOJOClass.java @@ -144,16 +144,29 @@ public boolean getMetaAsBool(String attribute, boolean defaultValue) { return MetaAttributeHelper.getMetaAsBool( meta.getMetaAttribute( attribute ), defaultValue ); } - public String getClassJavaDoc(String fallback, int indent) { + public String getClassJavaDoc(String fallback, int indent) { MetaAttribute c = meta.getMetaAttribute( CLASS_DESCRIPTION ); if ( c == null ) { - return c2j.toJavaDoc( fallback, indent ); + return c2j.toJavaDoc( fallback, indent ); } else { - return c2j.toJavaDoc( getMetaAsString( CLASS_DESCRIPTION ), indent ); + return c2j.toJavaDoc( MetaAttributeHelper.getMetaAsString(c), indent ); } } + public String getClassJavaDoc(String fallback, int indent, boolean javaDocFromDbComments) { + MetaAttribute c = meta.getMetaAttribute( CLASS_DESCRIPTION ); + if ( c == null ) { + if (javaDocFromDbComments) { + c = meta.getMetaAttribute(CLASS_DB_DESCRIPTION); + } + if ( c == null ) { + return c2j.toJavaDoc( fallback, indent ); + } + } + return c2j.toJavaDoc( MetaAttributeHelper.getMetaAsString(c), indent ); + } + public String getClassModifiers() { String classModifiers = null; @@ -535,26 +548,44 @@ public boolean getMetaAttribAsBool(MetaAttributable pc, String attribute, boolea } public boolean hasFieldJavaDoc(Property property) { - return property.getMetaAttribute("field-description")!=null; + return property.getMetaAttribute(FIELD_DESCRIPTION)!=null; } + public boolean hasFieldJavaDoc(Property property, boolean javaDocFromDbComments) { + return property.getMetaAttribute(FIELD_DESCRIPTION)!=null || + (javaDocFromDbComments && property.getMetaAttribute(FIELD_DB_DESCRIPTION)!=null); + } + public String getFieldJavaDoc(Property property, int indent) { - MetaAttribute c = property.getMetaAttribute( "field-description" ); + MetaAttribute c = property.getMetaAttribute( FIELD_DESCRIPTION ); if ( c == null ) { return c2j.toJavaDoc( "", indent ); } else { - return c2j.toJavaDoc( c2j.getMetaAsString( property, "field-description" ), indent ); + return c2j.toJavaDoc( MetaAttributeHelper.getMetaAsString(c), indent ); } } + public String getFieldJavaDoc(Property property, int indent, boolean javaDocFromDbComments) { + MetaAttribute c = property.getMetaAttribute( FIELD_DESCRIPTION ); + if ( c == null ) { + if (javaDocFromDbComments) { + c = property.getMetaAttribute( FIELD_DB_DESCRIPTION ); + } + if ( c == null ) { + return c2j.toJavaDoc("", indent); + } + } + return c2j.toJavaDoc( MetaAttributeHelper.getMetaAsString(c), indent ); + } + public String getFieldDescription(Property property){ - MetaAttribute c = property.getMetaAttribute( "field-description" ); + MetaAttribute c = property.getMetaAttribute( FIELD_DESCRIPTION ); if ( c == null ) { return ""; } else { - return c2j.getMetaAsString( property, "field-description" ); + return MetaAttributeHelper.getMetaAsString(c); } } diff --git a/src/templates/pojo/PojoFields.ftl b/src/templates/pojo/PojoFields.ftl index d2bf0547c5..20fce7d240 100644 --- a/src/templates/pojo/PojoFields.ftl +++ b/src/templates/pojo/PojoFields.ftl @@ -1,8 +1,8 @@ <#-- // Fields --> -<#foreach field in pojo.getAllPropertiesIterator()><#if pojo.getMetaAttribAsBool(field, "gen-property", true)> <#if pojo.hasMetaAttribute(field, "field-description")> /** - ${pojo.getFieldJavaDoc(field, 0)} +<#foreach field in pojo.getAllPropertiesIterator()><#if pojo.getMetaAttribAsBool(field, "gen-property", true)><#if annotateFields ><#if pojo.hasFieldJavaDoc(field, javaDocFromDbComments)> /** + ${pojo.getFieldJavaDoc(field, 0, javaDocFromDbComments)} */ - ${pojo.getFieldModifiers(field)} ${pojo.getJavaTypeName(field, jdk5)} ${c2j.keyWordCheck(field.name)}<#if pojo.hasFieldInitializor(field, jdk5)> = ${pojo.getFieldInitialization(field, jdk5)}; +<#assign property = field > <#-- Variable property is used in GetPropertyAnnotation.ftl--> <#include "GetPropertyAnnotation.ftl"/>${pojo.getFieldModifiers(field)} ${pojo.getJavaTypeName(field, jdk5)} ${c2j.keyWordCheck(field.name)}<#if pojo.hasFieldInitializor(field, jdk5)> = ${pojo.getFieldInitialization(field, jdk5)}; diff --git a/src/templates/pojo/PojoPropertyAccessors.ftl b/src/templates/pojo/PojoPropertyAccessors.ftl index 74f66a35f7..c5cde1f580 100644 --- a/src/templates/pojo/PojoPropertyAccessors.ftl +++ b/src/templates/pojo/PojoPropertyAccessors.ftl @@ -1,12 +1,12 @@ <#-- // Property accessors --> <#foreach property in pojo.getAllPropertiesIterator()> <#if pojo.getMetaAttribAsBool(property, "gen-property", true)> - <#if pojo.hasFieldJavaDoc(property)> +<#if !annotateFields ><#if pojo.hasFieldJavaDoc(property, javaDocFromDbComments) > /** - * ${pojo.getFieldJavaDoc(property, 4)} + ${pojo.getFieldJavaDoc(property, 4, javaDocFromDbComments)} */ - <#include "GetPropertyAnnotation.ftl"/> + <#include "GetPropertyAnnotation.ftl"/> ${pojo.getPropertyGetModifiers(property)} ${pojo.getJavaTypeName(property, jdk5)} ${pojo.getGetterSignature(property)}() { return this.${c2j.keyWordCheck(property.name)}; } diff --git a/src/templates/pojo/PojoTypeDeclaration.ftl b/src/templates/pojo/PojoTypeDeclaration.ftl index 010fee44db..676c6cac6c 100644 --- a/src/templates/pojo/PojoTypeDeclaration.ftl +++ b/src/templates/pojo/PojoTypeDeclaration.ftl @@ -1,5 +1,5 @@ /** -${pojo.getClassJavaDoc(pojo.getDeclarationName() + " generated by hbm2java", 0)} +${pojo.getClassJavaDoc(pojo.getDeclarationName() + " generated by hbm2java", 0, javaDocFromDbComments)} */ <#include "Ejb3TypeDeclaration.ftl"/> ${pojo.getClassModifiers()} ${pojo.getDeclarationType()} ${pojo.getDeclarationName()} ${pojo.getExtendsDeclaration()} ${pojo.getImplementsDeclaration()} \ No newline at end of file