You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Albert Lee (JIRA)" <ji...@apache.org> on 2008/05/20 21:47:55 UTC
[jira] Commented: (OPENJPA-605) Informix will throw an exception
when a unique index is explictily created on the primary key columns
[ https://issues.apache.org/jira/browse/OPENJPA-605?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12598432#action_12598432 ]
Albert Lee commented on OPENJPA-605:
------------------------------------
Fay,
Can the proposed solution encapsulate in the dictionary? I.e.
public boolean createIndex(Index idx, Table table)
throws SQLException {
if ( !_dict.needsToCreateIndex(idx,table)) {
return true;
}
.......
public class InformixDictionary .... {
public boolean needsToCreateIndex(Index idx, Table table) {
Column[] cols = idx.getColumns();
Column[] pkCols = table.getPrimaryKey().getColumns();
if (cols.length == pkCols.length) {
String[] colNames = new String[cols.length];
String[] pkColNames = new String[cols.length];
for (int i = 0; i < cols.length; i++)
colNames[i] = cols[i].getName();
for (int i = 0; i < pkCols.length; i++)
pkColNames[i] = pkCols[i].getName();
if (java.util.Arrays.equals(colNames, pkColNames))
return false;
}
return true;
}
}
public class DBDictionary ....{
public boolean needsToCreateIndex(Index idx, Table table) {
return true;
}
}
Thanks,
Albert Lee.
> Informix will throw an exception when a unique index is explictily created on the primary key columns
> -----------------------------------------------------------------------------------------------------
>
> Key: OPENJPA-605
> URL: https://issues.apache.org/jira/browse/OPENJPA-605
> Project: OpenJPA
> Issue Type: Bug
> Reporter: Fay Wang
> Attachments: openjpa.patch, openjpa.patch
>
>
> When an entity is defined as following (unique index annotation on the primary key field. In this situation):
> @Entity
> @Table(name="AddressBean")
> public class AddressBeanAno implements IAddressBean, Serializable {
> @EmbeddedId
> @Index(name="street_index",unique=true)
> @Column(length=30)
> private AddressPK street;
> Informix will issue an error:
> Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: Index already exists on column. {stmnt 1440372186 CREATE UNIQUE INDEX street_index ON AddressBean (street)} [code=-350, state=S0011]
> at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:192)
> at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$3(LoggingConnectionDecorator.java:189)
> 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:1204)
> at org.apache.openjpa.jdbc.schema.SchemaTool.createIndex(SchemaTool.java:1019)
> at org.apache.openjpa.jdbc.schema.SchemaTool.add(SchemaTool.java:554)
> 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)
> Per Informaix SQL syntax guide (Create Index section):
> You can not add a unique index to a column or column list that a primary -key constraint on it. The reason is that defining the column or column list as the primary key causes the database server to create a unique internal index on the column or column list. So you cannot create another unique index on this column or column list with CREATE INDEX statement.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.