Исключение [EclipseLink-3002] (Eclipse Persistence Services — 2.6.2.qualifier): org.eclipse.persistence.exceptions.ConversionException

Я пытаюсь получить записи таблицы в классе Java Entity, где один столбец определен как CLOB. когда я выполняю свой запрос выбора, я получаю следующую ошибку: -

[EclipseLink-3002] (Eclipse Persistence Services — классификатор 2.6.2): ​​ошибка org.eclipse.persistence.exceptions.ConversionException.

Ниже приведены подробности кода..........


В базе данных у меня есть столбец CLOB. Я выполняю запрос выбора на Entity. Ниже подробно.

В таблице базы данных столбец MSG определяется как CLOB.

Мой класс Entity ниже.

            @Entity
            @Table( name = "MyTable", schema="TEST" )
            @NamedQueries({ 
                @NamedQuery( name = "MyTable.findByChangeKey", query = "SELECT t FROM MyTable t WHERE t.changeKey = :changeKey)
                } )

            public class MyTable implements Serializable {
                private static final long serialVersionUID = 1L;
                @Id
                @Basic( optional = false )
                @Column( name = "ID", nullable = false )
                private Integer msgId;
                @Basic( optional = false )
                @Column( name = "CHANGE_KEY", nullable = false, length = 15 )
                private String changeKey;


                @Column( name = "MSG")
                @Lob
                private byte[] msg;


                public Tsmtidsm() {
                }

                public byte[] getMsg() {
                    if(msg!=null)
                    {
                    return (byte[])msg.clone();
                    }
                    else
                    {
                        return msg;
                    }        
                }

                public void setMsg( byte[] msg ) {
                    if(msg!=null)
                    {
                    this.msg = (byte[])msg.clone();
                    }
                    else
                    {
                        this.msg=null;
                    }        
                }

                public Tsmtidsm( Integer msgId ) {
                    this.msgId = msgId;
                }

                public Integer getMsgId() {
                    return msgId;
                }

                public void setMsgId( Integer msgId ) {
                    this.msgId = msgId;
                }

                public String getChangeKey() {
                    return changeKey;
                }

                public void setChangeKey( String changeKey ) {
                    this.changeKey = changeKey;
                }
            }

и ниже приведена строка кода, в которой я вызываю мой запрос на выбор

            Query searchQuery = em.createNamedQuery( "MyTable.findByChangeKey" );           
            searchQuery.setParameter("changeKey", serialNumber );

           List<MyTable> myTable=(List<MyTable>)searchQuery.getResultList();

Я получаю следующую ошибку при выполнении кода выше.

            Caused by: Exception [EclipseLink-3002] (Eclipse Persistence Services - 2.6.2.qualifier): org.eclipse.persistence.exceptions.ConversionException
            Exception Description: The object [[B@2b2d02e5], of class [class java.lang.String], from mapping [org.eclipse.persistence.mappings.DirectToFieldMapping[msg-->TEST.MyTable.MSG]] with descriptor [RelationalDescriptor(com.dao.data.MyTable--> [DatabaseTable(TEST.MyTable)])], could not be converted to [class [B].
                at org.eclipse.persistence.exceptions.ConversionException.couldNotConvertToByteArray(ConversionException.java:115)

Пожалуйста, помогите, я не уверен, что не так в приведенном выше коде, может ли кто-нибудь помочь мне здесь? Заранее спасибо!!


person user3194412    schedule 19.02.2018    source источник


Ответы (1)


CLOB должен быть char[], а не byte[] ..... byte[] для BLOB

person osama yaccoub    schedule 19.02.2018