Long strings are improperly mapped on Informix
----------------------------------------------
Key: OPENJPA-1420
URL: https://issues.apache.org/jira/browse/OPENJPA-1420
Project: OpenJPA
Issue Type: Bug
Components: jdbc
Affects Versions: 1.2.1
Environment: Windows XP 32-bit, Informix 11.5 database
Reporter: Marc Boudreau
Priority: Minor
The field:
@Basic
@Column(length=4000)
private String description;
gets mapped to VARCHAR(4000) which is illegal on Informix. The limit for
VARCHAR on Informix is 255. The field should be mapped to LVARCHAR, which
supports up to 32767 characters on Informix. TEXT should only be used if the
@Lob annotation is included, because this type can't be indexed.
This is my test entity:
MyEntity.java:
@Entity
public class MyEntity {
@Id
private int id;
@Basic
@Column(length=4000)
private String description;
public int getId() {
return id;
}
public void setId(int value) {
id = value;
}
public String getDescription() {
return description;
}
public void setDescription(String value) {
description = value;
}
}
This is what is dumped to the console:
2737 isvi INFO [main] openjpa.Runtime - Starting OpenJPA 1.2.1,
2951 isvi INFO [main] openjpa.jdbc.JDBC - Using dictionary class
"org.apache.openjpa.jdbc.sql.InformixDictionary".
Exception in thread "main" <openjpa-1.2.1-r752877:753278 nonfatal general
error> org.apache.openjpa.persistence.PersistenceException: IDS SQL Error:
SQLCODE=-650, SQLSTATE=IX000, SQLERRMC=null, DRIVER=3.51.90 {stmnt
809054265 CREATE TABLE MyEntity (id INTEGER NOT NULL, description VARCHAR
(4000), PRIMARY KEY (id)) LOCK MODE ROW} [code=-650, state=IX000]
at org.apache.openjpa.jdbc.meta.MappingTool.record
(MappingTool.java:553)
at org.apache.openjpa.jdbc.meta.MappingTool.record
(MappingTool.java:453)
at
org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.synchronizeMappings
(JDBCBrokerFactory.java:159)
at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.newBrokerImpl
(JDBCBrokerFactory.java:119)
at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker
(AbstractBrokerFactory.java:189))
at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker
(DelegatingBrokerFactory.java:142)
at
org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager
(EntityManagerFactoryImpl.java:192)
at
org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager
(EntityManagerFactoryImpl.java:145)
at
org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager
(EntityManagerFactoryImpl.java:56))
at jpa.test.isvi.Main.run(Main.java:12)
at jpa.test.isvi.Main.main(Main.java:53)
Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: IDS SQL
Error: SQLCODE=-650, SQLSTATE=IX000, SQLERRMC=null, DRIVER=3.51.90 {stmnt
809054265 CREATE TABLE MyEntity (id INTEGER NOT NULL, description VARCHAR
(4000), PRIMARY KEY (id)) LOCK MODE ROW} [code=-650, state=IX000]
at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap
(LoggingConnectionDecorator.java:192)
at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$700
(LoggingConnectionDecorator.java:57),
at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator
$LoggingConnection$LoggingStatement.executeUpdate
(LoggingConnectionDecorator.java:762)
at org.apache.openjpa.lib.jdbc.DelegatingStatement.executeUpdate
(DelegatingStatement.java:114)
at org.apache.openjpa.jdbc.schema.SchemaTool.executeSQL
(SchemaTool.java:1191)
at org.apache.openjpa.jdbc.schema.SchemaTool.createTable
(SchemaTool.java:949)
at org.apache.openjpa.jdbc.schema.SchemaTool.add(SchemaTool.java:526)
at org.apache.openjpa.jdbc.schema.SchemaTool.add(SchemaTool.java:344)
at org.apache.openjpa.jdbc.schema.SchemaTool.run(SchemaTool.java:321)
at org.apache.openjpa.jdbc.meta.MappingTool.record
(MappingTool.java:501):
... 10 more
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.