ObjectDB ObjectDB

com.objectdb.o.NLV cannot be cast to com.objectdb.o.CMV

#1

We are using ObjectDB 2.5.1_04. The following JPQL query causes an internal exception:

SELECT COUNT(r) FROM RecordingMetaData AS r WHERE ((r.mapFromCli LIKE '192.168.10.13%' ESCAPE '\'))

The exception:

Caused by: java.lang.IllegalStateException: com.objectdb.o.InternalException: Unexpected internal exception  
        at com.arunta.base.db.RecordingMetaDataDAO.getSingleResult(RecordingMetaDataDAO.java:958)            
        at com.arunta.app.services.RecordingService.getSingleResult(RecordingService.java:384)               
        ... 15 more                                                                                          
Caused by: com.objectdb.o.InternalException: Unexpected internal exception                                   
        at com.objectdb.o.JPE.h(JPE.java:165)                                                                
        at com.objectdb.o.ERR.f(ERR.java:70)                                                                 
        at com.objectdb.o.OBC.onObjectDBError(OBC.java:1484)                                                 
        at com.objectdb.jpa.JpaQuery.getSingleResult(JpaQuery.java:723)                                      
        at com.arunta.base.db.RecordingMetaDataDAO.getSingleResult(RecordingMetaDataDAO.java:938)            
        ... 16 more                                                                                          
Caused by: java.lang.ClassCastException: com.objectdb.o.NLV cannot be cast to com.objectdb.o.CMV             
        at com.objectdb.o.SLS.Uv(SLS.java:148)                                                               
        at com.objectdb.o.SBI.u(SBI.java:109)                                                                
        at com.objectdb.o.OBI.w(OBI.java:479)                                                                
        at com.objectdb.o.OBI.<init>(OBI.java:188)                                                           
        at com.objectdb.o.SBI.<init>(SBI.java:50)                                                            
        at com.objectdb.o.MST.aY(MST.java:778)                                                               
        at com.objectdb.o.BQI.Uu(BQI.java:128)                                                               
        at com.objectdb.o.GQI.Uu(GQI.java:120)                                                               
        at com.objectdb.o.PRG.ag(PRG.java:679)                                                               
        at com.objectdb.o.PRG.af(PRG.java:553)                                                               
        at com.objectdb.o.QRM.U6(QRM.java:265)                                                               
        at com.objectdb.o.MST.U6(MST.java:933)                                                               
        at com.objectdb.o.WRA.U6(WRA.java:293)                                                               
        at com.objectdb.o.WSM.U6(WSM.java:113)                                                               
        at com.objectdb.o.QRR.g(QRR.java:244)                                                                
        at com.objectdb.o.QRR.f(QRR.java:153)                                                                
        at com.objectdb.jpa.JpaQuery.getSingleResult(JpaQuery.java:716)                                      
        ... 17 more

The relevant code from RecordingMetaData:


@Entity(name="RecordingMetaData")

@SequenceGenerator(
    name="RecordingMetaData_sequence",
    sequenceName="RecordingMetaData_sequence",
    allocationSize=1
)
public class RecordingMetaData {

    private Long id;
    private Long version;
    :   
    private String mapFromCli;
    :
    public void setMapToCli(String mapToCli) {
        this.mapToCli = mapToCli;
    }

    @Basic
    public String getMapFromCli() {
        return mapFromCli;
    }

 

Any suggestions on how to avoid the exception?

Thank you

Emil

 

 

edit
delete
#2

Same problem in 2.5.4_03.

edit
delete
#3

Please post the stack trace that you get with version 2.5.4_03.

ObjectDB Support
edit
delete
#4

Here is the stack trace when using your DB explorer tool to run the query:

 

[ObjectDB 2.5.4_03] Unexpected exception (Error 990)
  Generated by Java HotSpot(TM) 64-Bit Server VM 1.7.0_11 (on Linux 2.6.32-279.9.1.el6.x86_64).
Please report this error on http://www.objectdb.com/database/issue/new                        
com.objectdb.o.InternalException: java.lang.ClassCastException: com.objectdb.o.NLV cannot be cast to com.objectdb.o.CMV                                                                                                    
java.lang.ClassCastException: com.objectdb.o.NLV cannot be cast to com.objectdb.o.CMV                        
        at com.objectdb.o.SLS.Uv(SLS.java:148)                                                               
        at com.objectdb.o.SBI.u(SBI.java:109)                                                                
        at com.objectdb.o.OBI.w(OBI.java:481)                                                                
        at com.objectdb.o.OBI.<init>(OBI.java:189)                                                           
        at com.objectdb.o.SBI.<init>(SBI.java:50)                                                            
        at com.objectdb.o.MST.aZ(MST.java:793)                                                               
        at com.objectdb.o.BQI.Uu(BQI.java:128)                                                               
        at com.objectdb.o.GQI.Uu(GQI.java:121)                                                               
        at com.objectdb.o.PRG.ag(PRG.java:679)                                                               
        at com.objectdb.o.PRG.af(PRG.java:553)                                                               
        at com.objectdb.o.QRM.Vb(QRM.java:285)                                                               
        at com.objectdb.o.MST.Vb(MST.java:949)
        at com.objectdb.o.WRA.Vb(WRA.java:311)
        at com.objectdb.o.WSM.Vb(WSM.java:115)
        at com.objectdb.o.QRR.g(QRR.java:244)
        at com.objectdb.o.QRR.f(QRR.java:153)
        at com.objectdb.jpa.JpaQuery.getResultList(JpaQuery.java:716)
        at com.objectdb.o.QRP.L(QRP.java:259)
        at com.objectdb.o.QRP.T(QRP.java:723)
        at com.objectdb.o.QRP.actionPerformed(QRP.java:686)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
        at java.awt.Component.processMouseEvent(Component.java:6505)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
        at java.awt.Component.processEvent(Component.java:6270)
        at java.awt.Container.processEvent(Container.java:2229)
        at java.awt.Component.dispatchEventImpl(Component.java:4861)
        at java.awt.Container.dispatchEventImpl(Container.java:2287)
        at java.awt.Component.dispatchEvent(Component.java:4687)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
        at java.awt.Container.dispatchEventImpl(Container.java:2273)
        at java.awt.Window.dispatchEventImpl(Window.java:2719)
        at java.awt.Component.dispatchEvent(Component.java:4687)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:723)
        at java.awt.EventQueue.access$200(EventQueue.java:103)
        at java.awt.EventQueue$3.run(EventQueue.java:682)
        at java.awt.EventQueue$3.run(EventQueue.java:680)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
        at java.awt.EventQueue$4.run(EventQueue.java:696)
        at java.awt.EventQueue$4.run(EventQueue.java:694)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:693)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
edit
delete
#5

It seems that the query is executed using a composite index on the mapFromCli field. Could you please provide details on composite indexes that include that field?

Unexpectedly, one of the values in that index is NULL rather than multiple values reflecting the indexed fields. This may indicate a missing value, maybe as a result of schema evolution or index definition changes Please provide relevant details, if any.

You may try repairing indexes by running the ObjectDB Doctor in repair mode.

If you can upload the database (possibly in a private support ticket) it will probably help understanding the exact cause.

ObjectDB Support
edit
delete
#6

The mapFormCli filed is a member of a number of composite indices:


@Entity(name="RecordingMetaData")

@SequenceGenerator(
    name="RecordingMetaData_sequence",
    sequenceName="RecordingMetaData_sequence",
    allocationSize=1
)

@Indices({
    // Indices for popular searches
    @Index(members={"mapToCli", "mapFromCli"}),
    @Index(members={"mapToCli", "mapFromCli", "callDirection"}),
    @Index(members={"startDate", "mapToCli", "mapFromCli"}),
    @Index(members={"startDate", "startTime", "mapToCli", "mapFromCli"}),
   
})
public class RecordingMetaData {

    private Long id;
    private Long version;
   
    private Date startDate;         // Date: date part of startDateTime
    private Date startTime;         // Time: time part of startDateTime
   
    private String mapToCli;
    private String mapFromCli;
   
    private Integer callDirection;

And yes, null values are allowed for mapFormCli.

We tried fixing the indices with the Doctor tool and it did not help. Then we deleted the DB file, and re-created the Db from scratch. Again, it did not help - same problem.

Are you saying that only a non-NULL members can participate in an index?

BTW, we had the same indices and rules for the mapFromCli field in an SQL DB and had no problem with it.

Emil

edit
delete
#7

Thank you for the details. Please try build 2.5.4_04, which may solve this issue.

ObjectDB Support
edit
delete
#8

I can confirm that 2.5.4_04 fixes the problem. Thank you.

edit
delete

Reply

To post on this website please sign in.