Index: src/org/netbeans/modules/j2ee/persistence/entitygenerator/DbSchemaEntityMember.java =================================================================== RCS file: /cvs/j2ee/persistence/src/org/netbeans/modules/j2ee/persistence/entitygenerator/DbSchemaEntityMember.java,v retrieving revision 1.5 diff -u -r1.5 DbSchemaEntityMember.java --- src/org/netbeans/modules/j2ee/persistence/entitygenerator/DbSchemaEntityMember.java 3 Oct 2007 14:43:41 -0000 1.5 +++ src/org/netbeans/modules/j2ee/persistence/entitygenerator/DbSchemaEntityMember.java 30 Oct 2007 13:55:15 -0000 @@ -62,6 +62,21 @@ private SQLType sqlType; /** + * The length (only applies to character types). + */ + private Integer length; + + /** + * The precision (only applies to numeric types). + */ + private Integer precision; + + /** + * The precision (only applies to numeric types). + */ + private Integer scale; + + /** * Column Element providing metadata */ private ColumnElement columnElement; @@ -72,6 +87,9 @@ setMemberName(makeFieldName(element.getName().getName())); isPrimaryKey = false; setMemberType(sqlType.getMemberType(element)); + if (element.isCharacterType()) { + length = element.getLength(); + } } public boolean isNullable() { @@ -140,4 +158,15 @@ return SQLTypeUtil.isLob(getColumnElement().getType()); } + public Integer getLength() { + return length; + } + + public Integer getPrecision() { + return precision; + } + + public Integer getScale() { + return scale; + } } Index: src/org/netbeans/modules/j2ee/persistence/entitygenerator/EntityMember.java =================================================================== RCS file: /cvs/j2ee/persistence/src/org/netbeans/modules/j2ee/persistence/entitygenerator/EntityMember.java,v retrieving revision 1.5 diff -u -r1.5 EntityMember.java --- src/org/netbeans/modules/j2ee/persistence/entitygenerator/EntityMember.java 3 Oct 2007 14:43:41 -0000 1.5 +++ src/org/netbeans/modules/j2ee/persistence/entitygenerator/EntityMember.java 30 Oct 2007 13:55:15 -0000 @@ -234,6 +234,12 @@ */ public abstract boolean supportsFinder(); + public abstract Integer getLength(); + + public abstract Integer getPrecision(); + + public abstract Integer getScale(); + /** * override java.lang.Object#equals based on member name. */ Index: src/org/netbeans/modules/j2ee/persistence/wizard/fromdb/JavaPersistenceGenerator.java =================================================================== RCS file: /cvs/j2ee/persistence/src/org/netbeans/modules/j2ee/persistence/wizard/fromdb/JavaPersistenceGenerator.java,v retrieving revision 1.24 diff -u -r1.24 JavaPersistenceGenerator.java --- src/org/netbeans/modules/j2ee/persistence/wizard/fromdb/JavaPersistenceGenerator.java 3 Oct 2007 14:43:53 -0000 1.24 +++ src/org/netbeans/modules/j2ee/persistence/wizard/fromdb/JavaPersistenceGenerator.java 30 Oct 2007 13:55:16 -0000 @@ -483,12 +483,17 @@ List columnAnnArguments = new ArrayList(); String memberName = m.getMemberName(); + String memberType = getMemberType(m); String columnName = (String) dbMappings.getCMPFieldMapping().get(memberName); columnAnnArguments.add(genUtils.createAnnotationArgument("name", columnName)); //NOI18N if (!m.isNullable()) { columnAnnArguments.add(genUtils.createAnnotationArgument("nullable", false)); //NOI18N } + Integer length = m.getLength(); + if (length != null && isCharacterType(memberType)) { + columnAnnArguments.add(genUtils.createAnnotationArgument("length", length)); // NOI18N + } annotations.add(genUtils.createAnnotation("javax.persistence.Column", columnAnnArguments)); //NOI18N String temporalType = getMemberTemporalType(m); @@ -497,7 +502,7 @@ annotations.add(genUtils.createAnnotation("javax.persistence.Temporal", Collections.singletonList(temporalAnnValueArgument))); } - return new Property(Modifier.PRIVATE, annotations, getMemberType(m), memberName); + return new Property(Modifier.PRIVATE, annotations, memberType, memberName); } /** @@ -519,6 +524,15 @@ memberType = "java.util.Date"; } return memberType; + } + + private boolean isCharacterType(String type) { + if ("java.lang.String".equals(type)) { // NOI18N + // XXX also need to check for char[] and Character[] + // (better to use TypeMirror) + return true; + } + return false; } private String getMemberTemporalType(EntityMember m) {