[ 
https://issues.apache.org/jira/browse/OPENJPA-2903?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18142291#comment-18142291
 ] 

Richard Zowalla commented on OPENJPA-2903:
------------------------------------------

Still reproducible on current master (4.2.0-SNAPSHOT, 4bad79e2f) with Derby. 
Reproducer, e.g. in 
openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/repro:

{code:java|title=BlobHolder2903.java}
package org.apache.openjpa.persistence.repro;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Lob;
import jakarta.persistence.Table;

@Entity
@Table(name = "REPRO_BLOB")
public class BlobHolder2903 {
    @Id
    public int id;

    public String name;

    @Lob
    @Column(name = "DATA")
    public byte[] data;
}
{code}
{code:java|title=BlobBean2903.java}
package org.apache.openjpa.persistence.repro;

/** Plain result class of a native query. */
public class BlobBean2903 {
    public String name;
    public byte[] data;
}
{code}
{code:java|title=TestRepro2903.java}
package org.apache.openjpa.persistence.repro;

import java.util.List;

import jakarta.persistence.EntityManager;

import org.apache.openjpa.persistence.test.SingleEMFTestCase;

/**
 * OPENJPA-2903: a native query with a non-entity result class fails when a 
BLOB column is mapped to a byte[] field.
 */
public class TestRepro2903 extends SingleEMFTestCase {
    @Override
    public void setUp() {
        setUp(BlobHolder2903.class, CLEAR_TABLES);
        try (EntityManager em = emf.createEntityManager()) {
            em.getTransaction().begin();
            BlobHolder2903 b = new BlobHolder2903();
            b.id = 1;
            b.name = "n1";
            b.data = new byte[] {1, 2, 3};
            em.persist(b);
            em.getTransaction().commit();
        }
    }

    public void testBlobIntoByteArrayField() {
        try (EntityManager em = emf.createEntityManager()) {
            List<?> r = em.createNativeQuery("SELECT NAME AS name, DATA AS data 
FROM REPRO_BLOB WHERE ID = 1",
                BlobBean2903.class).getResultList();
            BlobBean2903 b = (BlobBean2903) r.get(0);
            assertEquals("n1", b.name);
            assertEquals(3, b.data.length);
        }
    }
}
{code}

Result (Derby, so not specific to MariaDB Connector/J 3.x):
{noformat}
ArgumentException: There was an error packing the projection and/or aggregate 
results of the query into result type "class ...BlobBean2903".
Caused by: java.lang.ClassCastException: Cannot convert object 
"org.apache.derby.impl.jdbc.EmbedBlob@..." of type "class 
org.apache.derby.impl.jdbc.EmbedBlob" into an instance of "class [B".
{noformat}

> compatibility with MariaDB Java Client 3.0.6
> --------------------------------------------
>
>                 Key: OPENJPA-2903
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-2903
>             Project: OpenJPA
>          Issue Type: Wish
>    Affects Versions: 3.2.0
>         Environment: Operating System: Ubuntu
> JRE: OpenJDK Runtime Environment (build 11.0.16+8-post-Ubuntu-0ubuntu1)
>            Reporter: Patrice DUROUX
>            Priority: Trivial
>
> Hi,
> Here is what I got at runtime upgrading the MariaDB Java Client from 2.7.6 to 
> 3.0.6:
>  
> {noformat}
> <openjpa-3.2.0-r6f721f6 nonfatal user error> 
> org.apache.openjpa.persistence.ArgumentException: There was an error packing 
> the projection and/or aggregate results of the query into result type "class 
> org.imgt.model.genedb2.CustomBeanLIGMDB". See the nested Throwable exception 
> for details. FailedObject: SELECT sa.gene AS gene,sa.species AS 
> species,sa.exon AS exon,sa.number AS alleleNumber,se.seqnuc AS 
> fullSeq,fe2.feadeb AS posDeb,fe2.feafin AS posFin,sa.numacc AS 
> numacc,fe2.phase AS phase,sa.taxon AS taxon,fe2.partial AS 
> partiality,fe2.complement AS rc,sa.ordre AS exonorder FROM genedb.seqalleles 
> sa,ligmdb_v12.sequences se,ligmdb_v12.features fe1,ligmdb_v12.features 
> fe2,ontology.labels la1,ontology.labels la2 WHERE sa.is_ref=1 AND 
> sa.numacc=se.numacc AND sa.numacc=fe1.numacc AND sa.feanum=fe1.feanum AND 
> sa.labcode=fe1.labcode AND la1.label=sa.exon AND la1.labcode=la2.labcode AND 
> la2.labcode=fe2.labcode AND sa.numacc=fe2.numacc AND fe1.feadeb<=fe2.feadeb 
> AND fe2.feafin<=fe1.feafin AND sa.gene=? AND sa.species=? AND sa.numacc=? AND 
> sa.exon=? [java.lang.String] at 
> org.apache.openjpa.kernel.ResultPacker.packUserType(ResultPacker.java:299) at 
> org.apache.openjpa.kernel.ResultPacker.pack(ResultPacker.java:262) at 
> org.apache.openjpa.jdbc.kernel.SQLProjectionResultObjectProvider.getResultObject(SQLProjectionResultObjectProvider.java:98)
>  at 
> org.apache.openjpa.lib.rop.EagerResultList.<init>(EagerResultList.java:38) at 
> org.apache.openjpa.kernel.QueryImpl.toResult(QueryImpl.java:1314) at 
> org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:1061) at 
> org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:911) at 
> org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:842) at 
> org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:601) 
> at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:297) at 
> org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:314) at 
> org.imgt.dao.GENEDBDAO.getLIGMDBentries(GENEDBDAO.java:590) at 
> org.imgt.dao.GENEDBDAO.getLIGMDBentries(GENEDBDAO.java:616) at 
> org.imgt.util.fasta.GeneFastaSeq2.getFastaSeq(GeneFastaSeq2.java:46) at 
> org.imgt.toolbox.genedb.GenedbFlatFile.run(GenedbFlatFile.java:81) at 
> org.imgt.tools.cmd.FFile.run(FFile.java:18) at 
> picocli.CommandLine.executeUserObject(CommandLine.java:1939) at 
> picocli.CommandLine.access$1300(CommandLine.java:145) at 
> picocli.CommandLine$RunAll.recursivelyExecuteUserObject(CommandLine.java:2431)
>  at 
> picocli.CommandLine$RunAll.recursivelyExecuteUserObject(CommandLine.java:2433)
>  at picocli.CommandLine$RunAll.handle(CommandLine.java:2428) at 
> picocli.CommandLine$RunAll.handle(CommandLine.java:2389) at 
> picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179) 
> at picocli.CommandLine$RunAll.execute(CommandLine.java:2391) at 
> picocli.CommandLine.execute(CommandLine.java:2078) at 
> org.imgt.tools.SeqTool.main(SeqTool.java:19) Caused by: 
> java.lang.ClassCastException: Cannot convert object 
> "org.mariadb.jdbc.MariaDbBlob@2178ae3b" of type "class 
> org.mariadb.jdbc.MariaDbBlob" into an instance of "class [B". at 
> org.apache.openjpa.kernel.Filters.convert(Filters.java:395) at 
> org.apache.openjpa.kernel.Filters.convert(Filters.java:271) at 
> org.apache.openjpa.kernel.ResultPacker.packUserType(ResultPacker.java:280) 
> ... 25 more{noformat}
> Not sure on which side (OpenJPA? MariaDB Java Client?) the problem belongs to.
> Regards,
> Patrice



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to