I got a very weired problem. The query (I attached the code with the post) works for a while(after about 2000 records), then I get an java.lang.NoSuchMethodError: com.brightcove.reporting.records.VideoStreamedDetailRecord.getHibernateLazyInitializer()Lorg/hibernate/proxy/LazyInitializer.
The VideoStreamedDetailRecord is my persistent class. I attached the mapping code.
Does anybody have any idea about this? Please help, it is pretty urgent. Thanks
Hibernate version:3.1
Mapping documents: <class name="VideoStreamedDetailRecord" table="video_stream_detail_record">
<!--cache usage="dont use cache, would be inefficient use since we bulk read"/-->
<id name="id" type="long" column="id" unsaved-value="0">
@@hibernateIDGenerator@@
</id>
<property name="dateRecorded" column="date_recorded" type="timestamp" not-null="true"/>
<property name="publisherId" column="publisher_id" type="long" not-null="false"/>
<property name="affiliateId" column="affiliate_id" type="long" not-null="false"/>
<property name="videoId" column="video_id" type="long" not-null="true"/>
<property name="videoTitle" column="video_title" type="string" not-null="false" length="128"/>
<property name="lineUpId" column="lineup_id" type="long" not-null="false"/>
<property name="lineUpTitle" column="lineup_title" type="string" not-null="false" length="128"/>
<property name="playerId" column="player_id" type="long" not-null="true"/>
<property name="playerName" column="player_name" type="string" not-null="false" length="128"/>
<property name="playerTag" column="player_tag" type="string" not-null="false"/>
<property name="progressiveDownload" column="is_progressive" type="boolean" not-null="true"/>
<property name="secondsStreamed" column="seconds_streamed" type="int" not-null="true"/>
<property name="state" column="state" type="byte"/>
<property name="economicModel">
<type name="com.brightcove.utils.EnumUserType">
<param name="enumClassName">com.brightcove.payments.EconomicModelType</param>
</type>
</property>
</class>
Code between sessionFactory.openSession() and session.close():
public <T extends StatefulRecord> Iterator<T> dataToProcessByConsumerAccount(
Class<T> pClazz, Long pConsumerId, int pBatchSize){
Session sess = ThreadLocalSession.getCurrentSession() ;
// We do not put the class name directly in the query string because it is
// eaiser for eclipse to do refactoring.
String DATAITEM_TOBEPROCESSED_BY_PUBID = "FROM "
+ pClazz.getName() + " AS r "
+ " WHERE r.state = :dataSate "
+ " AND r.consumerId = :pubId "
+ " ORDER BY r.dateRecorded ASC";
Query q = sess.createQuery(DATAITEM_TOBEPROCESSED_BY_PUBID) ;
q.setParameter("dataSate", RecordStateEnum.OPEN) ;
q.setParameter("pubId", pConsumerId) ;
if( pBatchSize > 0 ){
q.setMaxResults( pBatchSize ) ;
}
Full stack trace of any exception that occurs:
java.lang.NoSuchMethodError: com.brightcove.reporting.records.VideoStreamedDetailRecord.getHibernateLazyInitializer()Lorg/hibernate/proxy/LazyInitializer;
at com.brightcove.reporting.records.VideoStreamedDetailRecord$$EnhancerByCGLIB$$d869ed93.getHibernateLazyInitializer(<generated>)
at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:274)
at org.hibernate.type.EntityType.resolve(EntityType.java:303)
at org.hibernate.type.EntityType.nullSafeGet(EntityType.java:217)
at org.hibernate.impl.IteratorImpl.postNext(IteratorImpl.java:93)
at org.hibernate.impl.IteratorImpl.next(IteratorImpl.java:120)
at com.brightcove.payments.PaymentSchedulerFacade.processRecordForCorporateAccount(PaymentSchedulerFacade.java:404)
at com.brightcove.payments.PaymentSchedulerFacade.processVideoStreamedDetailRecords(PaymentSchedulerFacade.java:144)
at com.brightcove.payments.ProcessUsageDataJob.executeJob(ProcessUsageDataJob.java:24)
at com.brightcove.scheduler.SchedulerJob.execute(SchedulerJob.java:22)
at org.quartz.core.JobRunShell.run(JobRunShell.java:191)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:516)
Name and version of the database you are using: Oracle
The generated SQL (show_sql=true):
Debug level Hibernate log excerpt:
|