Date   

JPA Attribute validation skipped with converter

stephane
 

Hi, 

When I use an attribute converter on an attribute, DN does not load the length validation attribute, keeping its default 255 value. (debug shows the length attribute is 255, probably not loaded)
Test case attached (last code version). In business code, I want to store the result from a rest-service.

I tried many options with @Column length, @Size, ... same result. I also tried to do not validate constraints (datanucleus.validation.mode=none). Same results.
 
Am I wrong somewhere or any workaround I can play with ?


-- 
Stephane
--
Stephane


Re: Issue migrating from MySQL 5.7 to 8.0.20: Index/candidate part #0 for xyz already set

Page bloom
 
Edited

This paragraph from the "Changes in MySQL 8.0.16" page (https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-16.html) looks interesting:

Incompatible Change: In MySQL 5.7, specifying a FOREIGN KEY definition for an InnoDB table without a CONSTRAINT symbol clause, or specifying the CONSTRAINT keyword without a symbol, causes InnoDB to use a generated constraint name. That behavior changed in MySQL 8.0, with InnoDB using the FOREIGN KEY index_name value instead of a generated name. Because constraint names must be unique per schema (database), the change caused errors due to foreign key index names that were not unique per schema. To avoid such errors, the new constraint naming behavior has been reverted, and InnoDB once again uses a generated constraint name.

For consistency with InnoDB, the NDB storage engine now uses a generated constraint name if the CONSTRAINT symbol clause is not specified, or the CONSTRAINT keyword is specified without a symbol. In NDB releases based on MySQL 5.7 and earlier MySQL 8.0 releases, NDB used the FOREIGN KEY index_name value.

The changes described above may introduce incompatibilities for applications that depend on the previous foreign key constraint naming behavior. (Bug #29173134)


Although, as we're using InnoDB and not NDB then it appears as though they've reverted the new 8.0 behaviour back to 5.7 behaviour as of 8.0.16 - confused :~]


Re: Issue migrating from MySQL 5.7 to 8.0.20: Index/candidate part #0 for xyz already set

Page bloom
 

Thanks for those details. I'll try to debug this.

I assume that ColumnOrderedKey is used regardless of the number of columns in the index. i.e. it is used for single key indexes as well as composite key indexes.

I base this assumption on the table involved in the above exception having no composite key indexes in either the meta data nor the existing table: just three single key indexes: primary key, an index on a foreign key and an index on the classid column (discriminator column).

If the index name in the existing database was different to what is expected by DN would that cause this type of issue? I wonder if the algorithm used for forming the index name could have different behaviour under the new MySQL 8.x JDBC driver (Connector/J) or MySQL 8.x database.


Re: Issue migrating from MySQL 5.7 to 8.0.20: Index/candidate part #0 for xyz already set

Andy
 

Sets the relative position of a column that is part of an index. So if you have a composite index formed of two columns, the index behaves differently dependent on the ordering / position of columns.

CREATE INDEX i1 ON t1 (col1 ASC, col2 DESC);

Debug what MySQL JDBC driver is returning from the getIndexes call (i.e what info TableImpl.getExistingIndices has available to it), how many columns in the index, their positions, their ordering etc.


Issue migrating from MySQL 5.7 to 8.0.20: Index/candidate part #0 for xyz already set

Page bloom
 
Edited

Has anyone else seen this issue before?
 
Everything has been working fine for all MySQL 5.x versions but after exporting the database as a SQL dump from 5.7 and importing the SQL dump into a new MySQL 8.0.20 installation (no separate mysql upgrade process is required if using 8.0.16 or later - does it automatically according to MySQL website) when we attempt to start up the app and it performs schema validation/update we see:

[DEBUG] 09:30:35.121 Schema - An error occurred while auto-creating schema elements - rolling back
[DEBUG] 09:30:35.121 Schema - Schema Transaction ROLLING BACK with connection "com.sun.proxy.$Proxy30@2075f909"
[DEBUG] 09:30:35.121 Schema - Schema Transaction CLOSED with connection "com.sun.proxy.$Proxy30@2075f909"
[DEBUG] 09:30:35.122 Connection - ManagedConnection COMMITTING : "org.datanucleus.store.rdbms.ConnectionFactoryImpl$ManagedConnectionImpl@6092a087 [conn=com.sun.proxy.$Proxy30@2075f909, commitOnRelease=true, closeOnRelease=true, closeOnTxnEnd=true]"
[DEBUG] 09:30:35.122 Connection - ManagedConnection CLOSED : "org.datanucleus.store.rdbms.ConnectionFactoryImpl$ManagedConnectionImpl@6092a087 [conn=com.sun.proxy.$Proxy30@2075f909, commitOnRelease=true, closeOnRelease=true, closeOnTxnEnd=true]"
[WARN ] 09:30:35.123 Persistence - Unknown Error during auto starter execution. : Index/candidate part #0 for sa_wkf_orgroledef already set
Index/candidate part #0 for sa_wkf_orgroledef already set
org.datanucleus.exceptions.NucleusException: Index/candidate part #0 for sa_wkf_orgroledef already set
at org.datanucleus.store.rdbms.key.ColumnOrderedKey.setColumn(ColumnOrderedKey.java:106)
at org.datanucleus.store.rdbms.table.TableImpl.getExistingIndices(TableImpl.java:1150)
at org.datanucleus.store.rdbms.table.TableImpl.validateIndices(TableImpl.java:560)
at org.datanucleus.store.rdbms.table.TableImpl.validateConstraints(TableImpl.java:386)
at org.datanucleus.store.rdbms.table.ClassTable.validateConstraints(ClassTable.java:3596)
at org.datanucleus.store.rdbms.RDBMSStoreManager$ClassAdder.performTablesValidation(RDBMSStoreManager.java:3502)
at org.datanucleus.store.rdbms.RDBMSStoreManager$ClassAdder.run(RDBMSStoreManager.java:2938)
at org.datanucleus.store.rdbms.AbstractSchemaTransaction.execute(AbstractSchemaTransaction.java:118)
at org.datanucleus.store.rdbms.RDBMSStoreManager.manageClasses(RDBMSStoreManager.java:1641)
at org.datanucleus.PersistenceNucleusContextImpl.initialiseAutoStart(PersistenceNucleusContextImpl.java:802)
at org.datanucleus.PersistenceNucleusContextImpl.initialise(PersistenceNucleusContextImpl.java:498)
at org.datanucleus.api.jdo.JDOPersistenceManagerFactory.freezeConfiguration(JDOPersistenceManagerFactory.java:859)
at org.datanucleus.api.jdo.JDOPersistenceManagerFactory.createPersistenceManagerFactory(JDOPersistenceManagerFactory.java:346)
at org.datanucleus.api.jdo.JDOPersistenceManagerFactory.getPersistenceManagerFactory(JDOPersistenceManagerFactory.java:225)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at javax.jdo.JDOHelper$16.run(JDOHelper.java:1975)
at java.security.AccessController.doPrivileged(Native Method)
at javax.jdo.JDOHelper.invoke(JDOHelper.java:1970)
at javax.jdo.JDOHelper.invokeGetPersistenceManagerFactoryOnImplementation(JDOHelper.java:1177)
at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:814)
at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:702)
at com.sas.framework.expojo.jdo.JdoExpojoContextFactory.init(JdoExpojoContextFactory.java:213)

The method in which the exception is thrown is ColumnOrderedKey:

    public void setColumn(int seq, Column col) {
        this.assertSameDatastoreObject(col);
        setMinSize(this.columns, seq + 1);
        setMinSize(this.columnOrdering, seq + 1);
        if (this.columns.get(seq) != null) {
            throw (new NucleusException("Index/candidate part #" + seq + " for " + this.table + " already set")).setFatal();
        } else {
            this.columns.set(seq, col);
            this.columnOrdering.set(seq, (Object)null);
        }
    }

I'm trying to debug why this would be occurring and need some background info on what this method is trying to do.

From the source comments ColumnOrderedKey is a composite key where the ordering of the columns is important.

It looks like it's trying to set a particular column in the columns list but that element of the list has already been set beforehand - any suggestions as to how that could occur or an approach to debugging that scenario?


Re: Currently do not support adding restriction on discriminator for table

Page bloom
 

Presumably the warning is indicating a possible "non optimal performance" SQL query rendered from the JDOQL. If a WHERE clause of discriminator conditions are left out then the range of records the DB must scan is likely much larger for most types of queries.

So I assume what is supported is a WHERE clause of discriminator classId=x conditions only in the case of a query's candidate class.
What is not supported is generating a WHERE clause of discriminator classId=x conditions for a relationship of the candidate class, the kind that might be generated by something like:


q.setFilter("relation instanceof MyClassB && ((MyClassB)relation).attributeOfB != null")

I guess SQL isn't Java so even though the JDOQL can be Java like it's constrained.

Perhaps a nested JDOQL query might work better here? Hmmmm


Re: Adding jdo-query to maven based project causes compile error

iansaucy@...
 

Thanks for giving me the direction to look in, I'll try see if I can remove the use of modules and maybe that will fix it.

 

I did just try something with Maven, I created a parent and child pom, the parent is the same minus the datanucleus-jdo-query dependency, the parent has a maven toolchain version of Java 13 while the child with only one dependency has a version of Java 8. This compiles, it actually does run without issues except for IntelliJ not being able to find the new compile classes(thus type enforcement does not work). This was more or less the way I went about doing this dual compile mode.

I have a feeling this is not a real solution....but I don't actually know. Here is a gist of those two poms though,
https://gist.github.com/IanSaucy/ce8d29c4c27462714d66dab285f71141

Thanks again!


Re: Adding jdo-query to maven based project causes compile error

Andy
 
Edited

Compare the "maven --debug clean compile" output between JDK 8 and JDK 13 for a basic case. The real difference between those is "Jigsaw" (java modules) addition to the JDK. I don't use it.
Similarly compare the above output between the basic case with datanucleus-jdo-query (annotation processor present) and without datanucleus-jdo-query (no annotation processors present).


About updating ANY code in GitHub, you provide PULL REQUESTS to the relevant GitHub project, since this is open source. Thx


Re: Adding jdo-query to maven based project causes compile error

iansaucy@...
 

It seems to be failing when it goes to search for the type annotation classes to compile resources using them? But my experiance with this type of thing is very little so I am extremely lost as pinning down the errors. My lack of detailed understanding on the Java compile process does not help either. I took the example for JDO type queries from github and adapted it to use JDK 8(It was configured for 1.6 I think). With Java 8 the example was happy to compile and run, so that definitely shows it's a java version issue.

Here is a gist of mvn --debug clean compile for my code on Java 13

https://gist.github.com/IanSaucy/76bd144139f14d50c61ec9dba4b328ce

In addition, here is one for mvn --debug clean compile for the example on Java 13, the error is slightly different but seems to be related to do the same thing.

https://gist.github.com/IanSaucy/a705758b51835ebbf54042026d262e62


So it sounds like I either need to downgrade to Java 8 (and JavaFX) or figure out what the actual issue is and try to fix it. If you/anyone has any pointers on what it might be I'm pretty keen to do some digging.

P.s. I noticed a lot of the examples on GitHub utilize outdated Java version(pre 1.8). Is there a standard for updating those? I'd love to help get them up to date so they're more relevant.

Thanks!


Re: Adding jdo-query to maven based project causes compile error

Andy
 

If it fails before generating JDOQLTypedQuery classes (i.e the preCompile step), then where is it failing??

maven --debug
tells you way more than we see here. Posting the class is irrelevant if that class is never referenced in the error / exception.

Try an earlier JDK? I use v8, what DN is developed on. Cut the case down to something simpler with just a basic JDO class, and no RDBMS, java fx etc, since your problem is compile, not runtime.


Adding jdo-query to maven based project causes compile error

iansaucy@...
 
Edited

After my misguided attempt to get some help on github I'm trying to do it correctly here (:

 

I'm in the midst of setting up a JavaFX project with Datanucleu + JDO + JDOQL. I've got the first two parts working without issue, I've got a connection to the database, I can read and write no issues. When I go to add the JDOQL step, along with the maven plugin the compile fails with the following error.

`Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) on project projectName: Fatal error compiling: java.lang.NoClassDefFoundError: javax/jdo/annotations/PersistenceCapable: javax.jdo.annotations.PersistenceCapable -> [Help 1]`

I'm running OpenJDK 13, JavaFX 14 and the latest version of most datanucleus plugins/dependencies. I've got the persistence XML configured and that picks up alright, I'm setting properties inside that file as well.

I'm at a complete loss as to what the issue might be, I've compared my code to the examples and it seems basically identical. It seems like it can't find the dependencies for the JDO annotations, which doesn't make sense because it worked before adding this plugin. It does not even get to the point of generating the query classes, it fails before that step.
Any guidance would be great!

Here is my POM.XML

```
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.redacted</groupId>
    <artifactId>redacted</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <properties>
        <config.files.dir>${basedir}/src/main/resources</config.files.dir>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <openjfx.Version>14</openjfx.Version>
        <openjfx.Maven.Version>0.0.4</openjfx.Maven.Version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.datanucleus</groupId>
            <artifactId>datanucleus-core</artifactId>
            <version>[5.1.6, 5.9)</version>
        </dependency>
        <dependency>
            <groupId>org.datanucleus</groupId>
            <artifactId>datanucleus-api-jdo</artifactId>
            <version>5.2.3</version>
        </dependency>
        <dependency>
            <groupId>org.datanucleus</groupId>
            <artifactId>datanucleus-rdbms</artifactId>
            <version>[5.1.6, 5.9)</version>
        </dependency>
        <dependency>
            <groupId>org.datanucleus</groupId>
            <artifactId>javax.jdo</artifactId>
            <version>3.2.0-m13</version>
        </dependency>
        <dependency>
            <groupId>org.datanucleus</groupId>
            <artifactId>datanucleus-jdo-query</artifactId>
            <version>[5.0.9, )</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>[1.2.17, )</version>
        </dependency>
        <dependency>
            <groupId>org.xerial</groupId>
            <artifactId>sqlite-jdbc</artifactId>
            <version>3.30.1</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>${openjfx.Version}</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-fxml</artifactId>
            <version>${openjfx.Version}</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.4.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.testfx</groupId>
            <artifactId>testfx-junit5</artifactId>
            <version>4.0.16-alpha</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.assertj</groupId>
            <artifactId>assertj-core</artifactId>
            <version>3.13.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <resources>
            <resource>
                <directory>${basedir}/src/main/resources</directory>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.datanucleus</groupId>
                <artifactId>datanucleus-maven-plugin</artifactId>
                <version>5.2.1</version>
                <configuration>
                    <persistenceUnitName>CentralUnit</persistenceUnitName>
                    <api>JDO</api>
<!--                    <props>${config.files.dir}/datanucleus.properties</props>-->
                    <log4jConfiguration>${config.files.dir}/log4j.properties</log4jConfiguration>
                    <verbose>true</verbose>
                </configuration>
                <executions>
                    <execution>
                        <phase>process-classes</phase>
                        <goals>
                            <goal>enhance</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <configuration>
                    <mainClass>com.redacted.App.Main</mainClass>
                    <systemProperties>
                        <systemProperty>
                            <key>log4j.configuration</key>
                            <value>file:${config.files.dir}/log4j.properties</value>
                        </systemProperty>
                    </systemProperties>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <release>11</release>
                    <compilerArgument>-AqueryMode=FIELD</compilerArgument>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-clean-plugin</artifactId>
                <version>3.0.0</version>
                <configuration>
                    <filesets>
                        <fileset>
                            <directory>${basedir}</directory>
                            <includes>
                                <include>*.log</include>
                                <include>*.ods</include>
                            </includes>
                        </fileset>
                    </filesets>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.openjfx</groupId>
                <artifactId>javafx-maven-plugin</artifactId>
                <version>${openjfx.Maven.Version}</version>
                <configuration>
                    <mainClass>es.deusto.App</mainClass>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.1</version>
            </plugin>
            <plugin>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>2.8.2</version>
            </plugin>
            <plugin>
                <artifactId>maven-site-plugin</artifactId>
                <version>3.7.1</version>
            </plugin>
            <plugin>
                <artifactId>maven-project-info-reports-plugin</artifactId>
                <version>3.0.0</version>
            </plugin>
        </plugins>
    </build>
</project>


```
My persistnce.XML


```
<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
        http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd" version="2.1">

    <!-- JDO tutorial "unit" -->
    <persistence-unit name="CentralUnit">
        <class>es.deusto.User</class>
        <exclude-unlisted-classes/>
        <properties>
            <property name="javax.jdo.option.ConnectionURL" value="jdbc:sqlite:src/main/resources/database.db"/>
            <property name="javax.jdo.PersistenceManagerFactoryClass" value="org.datanucleus.api.jdo.JDOPersistenceManagerFactory"/>
            <property name="datanucleus.schema.autoCreateAll" value="true"/>
            <property name="datanucleus.validateTables" value="true"/>
            <property name="datanucleus.validateConstraints" value="true"/>
            <property name="datanucleus.metadata.validate" value="false"/>
        </properties>
    </persistence-unit>
</persistence>
```

My User class
```import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;
import java.util.Date;


@PersistenceCapable
//@Inheritance(strategy= InheritanceStrategy.NEW_TABLE)
public class User {

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.INCREMENT)
    protected long id;


    protected String firstName;
    protected String lastName;
    protected String notes;
    protected String phoneNumber;
    protected Date birthDate;
    protected Date dateJoined;
    protected Date createdAt;
    protected Date updatedAt;


    protected User(){};
//Omitted all the getters and setters```


Re: No support for sequence generator to mariadb

Andy
 
Edited

What is this ? https://github.com/datanucleus/datanucleus-rdbms/issues/292   from back in 2018 ...

and for the record, this is an open source project, so if you need something "supported" then you get the code and contribute it


No support for sequence generator to mariadb

msyed080@...
 

javax-jdo SequenceGenerator does not support for MariaDB
http://www.datanucleus.org/products/accessplatform/jpa/mapping.html#valuegen_sequence

But Maria db has support for sequences from 10.3

https://mariadb.com/kb/en/create-sequence/

Could you please provide support for SequenceGenerator for MariaDB?


Re: Upgrading to 5.2.1 gives error - Cant be mapped for this datastore. No mapping is available

msyed080@...
 

Thanks for the quick response :)
Will try your suggestion. But for quick update what i found out was in datanucleus-core.jar - ColumnMetaData.java the JdbcType and sqlType are getting set as null for custom id field.


Re: Upgrading to 5.2.1 gives error - Cant be mapped for this datastore. No mapping is available

Andy
 

There are many releases between 5.0.0 and 5.2.1. Suggest that you try those and isolate where your case doesn't work. Then from that you can see what changes were made in GitHub for that release (for the RDBMS plugin). The log tells you lots about what datastore types are "available" for your datastore; only you know which datastore that is.


Upgrading to 5.2.1 gives error - Cant be mapped for this datastore. No mapping is available

msyed080@...
 

We have created a custom id generator class ABCDLongValueGenerator.java for id column
plugin.xml
<?xml version="1.0"?>
<plugin id="abcd" name="DataNucleus plug-ins" provider-name="abcd">
<extension point="org.datanucleus.store_valuegenerator">
<valuegenerator name="ABCDLongValueGenerator" class-name="com.abcd.nm.stats.datanucleus.util.ABCDLongValueGenerator" unique="true"/>
</extension>
</plugin>
 
public ABCDLongValueGenerator(StoreManager store, String name)
{
super(store, name);
}

and the above constructor is also updated to 5.2.1 changes

The code was working fine in 5.0.0 version but when we update it to 5.2.1 its giving below exception 
  • Failed to generate new Mapping of type org.datanucleus.store.rdbms.mapping.java.LongMapping, exception : The java type java.lang.Long (jdbc-type="", sql-type="") for field "com.abcd.nm.stats.datanucleus.mediation.pmmo.NodeInv.id" cant be mapped for this datastore. No mapping is available.

Could you please help.


Re: How to call oracle stored procedure with sys_refcursor output in Java JPA DataNucleus?

Andy
 

As said before, work out what JDBC calls you would have made using CallableStatement if you were doing the same thing, and compare with the calls made by DataNucleus


Re: How to call oracle stored procedure with sys_refcursor output in Java JPA DataNucleus?

V MANIKANTHAN
 

I made the changes as suggested.
Then it broke at different place. Getting data type set correctly.
I went through Java and Oracle SQL type and used it.
Then it broke when retrieving the data. I'm not sure how to proceed further.


Re: How to call oracle stored procedure with sys_refcursor output in Java JPA DataNucleus?

V MANIKANTHAN
 

Thanks for your assistance. I will look at this code.


Re: How to call oracle stored procedure with sys_refcursor output in Java JPA DataNucleus?

Andy
 

Logging is defined in http://www.datanucleus.org:15080/products/accessplatform_5_2/jdo/persistence.html#logging  and you simply set DataNucleus.Datastore and subcategories for datastore communication (such as DDL or SQL).

Get the code as previously advised. Look at
https://github.com/datanucleus/datanucleus-rdbms/blob/master/src/main/java/org/datanucleus/store/rdbms/query/StoredProcedureQuery.java#L316
and
https://github.com/datanucleus/datanucleus-rdbms/blob/master/src/main/java/org/datanucleus/store/rdbms/query/StoredProcedureQuery.java#L451

and consider adding something like this

|| param.getMode() == StoredProcQueryParameterMode.REF_CURSOR

to those lines. I don't use REF_CURSOR so its up to people to try things and contribute so that their requirements are catered for (but that's why open source exists, after all).

281 - 300 of 446