Hi all,
I have experienced exactly the same going from 1.2.2 to 2.4.0 
(openjpa-2.4.0-nonfinal-1598334.jar). (I think it was the same with 2.3.0 also)

Having an old database with the columns as varchar2(255) and must keep it that 
way for various reasons.

I know it is only a warning but is it possible to force creation of a fixed 
(not calculated) column size?

Using annotations and "length=255" is apparently not working.
@Column(name = "mime_type", length = 255) // Not working

Best regards,
Henrik Melander

On 05/23/2014 04:5149 PM, Jason Reilly wrote:
Changing *just* the openjpa dependency version to 2.2.2 in my pom, the
schema creation looks like this:

CREATE TABLE file_data (file_data_id BIGINT NOT NULL, date_created TIMESTAMP, 
md5 VARCHAR(255),
mime_type VARCHAR(255), name VARCHAR(255), path VARCHAR(32672), PRIMARY KEY 
(file_data_id));


Regards,
Jason

On 05/23/2014 10:49 AM, Kevin Sutter wrote:
Hi Jason,
Something's out of whack...  I went to the code that determines the size to
use for enum fields and it has used the largest enum string length since
2006...  We have never defaulted to 255 for @Enumerated types, for any
database...

The DDL you posted was for 2.3.0.  Any chance you still have your 2.2.x
environment and you can capture the ddl for that run?

The code is quite simple if you are interested.  Here links for the 2.2.x
branch as well as 2.3.0.  The code that is doing this length determination
is like this:

         if (_ordinal)
             col.setJavaType(JavaTypes.SHORT);
         else {
             // look for the longest enum value name; use 20 as min length to
             // leave room for future long names
             int len = 20;
             for (int i = 0; i < _vals.length; i++)
                 len = Math.max(_vals[i].name().length(), len);

             col.setJavaType(JavaTypes.STRING);
             col.setSize(len);
         }

[1]
https://svn.apache.org/repos/asf/openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/EnumValueHandler.java
[2]
https://svn.apache.org/repos/asf/openjpa/tags/2.3.0/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/EnumValueHandler.java


On Fri, May 23, 2014 at 8:17 AM, Jason Reilly <jdr0...@renci.org> wrote:

Sure....


Here is the log statement:

2014-05-22 14:26:44,437 | WARN  | Thread-128       | Schema
             | b.log.SLF4JLogFactory$LogAdapter  103 | 156 -
org.apache.openjpa - 2.3.0 | Existing column "mime_type" on table
"public.file_data" is incompatible with the same column in the given schema
definition. Existing column:

Full Name: file_data.mime_type

Type: varchar

Size: 255

Default: null

Not Null: false

Given column:

Full Name: file_data.mime_type

Type: varchar

Size: 30

Default: null

Not Null: false



And here is the column declaration in my model for FileData.mimeType:

     @Column(name = "mime_type")

     @Enumerated(EnumType.STRING)

     private MimeType mimeType;



And from the schema creation script:

CREATE TABLE file_data (file_data_id BIGINT NOT NULL, date_created
TIMESTAMP, md5 VARCHAR(255), mime_type VARCHAR(30), name VARCHAR(255), path
VARCHAR(32672), PRIMARY KEY (file_data_id));


The longest value in the MimeType enum is 30 characters in length.
Observing some of the other warning messages, it seems that if the Enum
value length is less than 20, the expected column length is 20.  So, 20 is
the lower bounds.

Regards,
Jason


On 05/22/2014 05:01 PM, Kevin Sutter wrote:

Hi Jason,
I'm not aware of a change that went into 2.3.0 that would affect this type
of processing.  I just searched the JIRAs as well and didn't find
anything...  Can you post the exact warning message you are receiving?
Along with your Entity definition of the Enumerated type?  And, extract
the
schema definition from your database?  I know we've had some issues with
sequence generators and Postgres, but I'm not aware of any issues with the
processing of enums.

Thanks, Kevin


On Thu, May 22, 2014 at 3:30 PM, Jason Reilly <jdr0...@renci.org> wrote:

  With OpenJPA 2.2.2, the generated column length for an
@Enumerated(EnumType.STRING) is varchar(255) in Postgresql.  With an
upgrade to OpenJPA 2.3.0, I think that the expected column length is the
length of the Enum's longest value....usually shorter than 255
characters.
   I suspect this could problematic (at least annoying) if the database
schema was first created with OpenJPA 2.3.0 and the database column
length
had to be adjusted every time I add a new Enum that is longer than the
previously longest Enum value.


On 05/22/2014 04:09 PM, Kevin Sutter wrote:

  Well, if you don't have access or the means to update this varchar
length,
then you probably have to ignore it...  :-)  This is a warning to
indicate
a mismatch.  I suppose you can ignore it, but then you have a chance
of
truncated values.  Are the enum values pre-defined like the column size?
Or, can you maybe abbreviate the enum values to make them fit the column
size?  It's really up to you whether these warnings are safe to ignore
or
not.

Kevin


On Thu, May 22, 2014 at 2:10 PM, Jason Reilly <jdr0...@renci.org>
wrote:

   Sorry....I am using OpenJPA 2.3.0

On 05/22/2014 03:09 PM, Jason Reilly wrote:

   Hi all,

I am getting a warning that the column that an Enum is mapped
to (as a
string) is incompatible with the column in the schema definition.
Looks
like the expected column size is the length of the longest Enum
value.
   As
it is a warning and I don't easily have access to change the
varchar
length, can this be safely ignored?

Thanks,
Jason






Reply via email to