Kutman Salamatov
Kutman Salamatov

Reputation: 1

javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not extract ResultSet

Here the error:

javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not extract ResultSet
        at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)
        at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181)
        at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:188)
        at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:840)
        at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:816)
        at com.axelor.apps.estate.service.generator.MeterServiceReadingGenerator.lambda$generateReadingForMeter$0(MeterServiceReadingGenerator.java:60)
        at java.base/java.lang.Iterable.forEach(Iterable.java:75)
        at com.axelor.apps.estate.service.generator.MeterServiceReadingGenerator.generateReadingForMeter(MeterServiceReadingGenerator.java:53)
        at com.google.inject.persist.jpa.JpaLocalTxnInterceptor.invoke(JpaLocalTxnInterceptor.java:64)
        at com.axelor.apps.estate.job.MeterAutoReadingJob.executeInThread(MeterAutoReadingJob.java:41)
        at com.axelor.apps.base.job.ThreadedJob.executeInThreadedRequestScope(ThreadedJob.java:77)
        at com.axelor.apps.base.job.ThreadedJob.lambda$execute$0(ThreadedJob.java:47)
        at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: org.hibernate.exception.GenericJDBCException: could not extract ResultSet
        at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)
        at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)
        at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99)
        at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:67)
        at org.hibernate.loader.Loader.getResultSet(Loader.java:2322)
        at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2075)
        at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2037)
        at org.hibernate.loader.Loader.doQuery(Loader.java:956)
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:357)
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:327)
        at org.hibernate.loader.Loader.loadEntity(Loader.java:2440)
        at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:77)
        at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:61)
        at org.hibernate.persister.entity.AbstractEntityPersister.doLoad(AbstractEntityPersister.java:4550)
        at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:4540)
        at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:571)
        at org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:539)
        at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:208)
        at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:327)
        at org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:108)
        at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:74)
        at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:118)
        at org.hibernate.internal.SessionImpl.fireLoadNoChecks(SessionImpl.java:1231)
        at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1220)
        at org.hibernate.internal.SessionImpl.access$2100(SessionImpl.java:202)
        at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.doLoad(SessionImpl.java:2848)
        at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.lambda$load$1(SessionImpl.java:2825)
        at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.perform(SessionImpl.java:2781)
        at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.load(SessionImpl.java:2825)
        at org.hibernate.internal.SessionImpl.get(SessionImpl.java:1024)
        at org.hibernate.event.internal.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:308)
        at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:175)
        at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:74)
        at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:107)
        at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:829)
        ... 9 common frames omitted

Here the code:

public class MeterAutoReadingJob extends ThreadedJob {

    private static final Logger logger = LoggerFactory.getLogger(MeterAutoReadingJob.class);

    @Inject
    private MeterService meterService;

    @Inject
    private MeterServiceReadingGenerator readingGenerator;

    @Override
    public void executeInThread(JobExecutionContext context) throws JobExecutionException {
        try {
            List<Meter> meters = meterService.getAllMeters();
            logger.info("Meters found: " + meters.size());
            readingGenerator.generateReadingForMeter(meters);
        } catch (Exception e) {
            logger.error("Error executing meter auto reading job", e);
            throw new JobExecutionException("Error executing meter auto reading job", e);
        }
        logger.debug("Completed MeterAutoReadingJob");
    }
}
public class MeterServiceReadingGenerator {
    
    private static final Logger LOG = LoggerFactory.getLogger(MeterServiceReadingGenerator.class);

    @Inject
    private MeterService meterService;

    @Inject
    private ReadingManagementRepository readingRepository;

    @Inject
    private ReadingSourceRepository readingSourceRepository;

    @Transactional(rollbackOn = {Exception.class})
    public void generateReadingForMeter(List<Meter> meter) {
        List<Reading> readingsToSave = new ArrayList<Reading>();
        for (Meter estateMeter : meter) {
            try{
                JSONArray jsonArray = meterService.checkMeter(estateMeter.getMeterName());
                jsonArray.forEach(item -> {
                    if (item instanceof JSONObject jsonObject) {
                        try {
                            BigDecimal meterValue = BigDecimal.valueOf(jsonObject.getDouble("value"));
                            ReadingSource emailSource = readingSourceRepository.findByName("Telegram bot.");
                            LOG.info("Source: " + emailSource);

                            Reading reading = createNewReading(JPA.em().merge(estateMeter), meterValue, emailSource);
                            readingsToSave.add(reading);
                        } catch (JSONException e) {
                            throw new RuntimeException("Error parsing JSON object", e);
                        }
                    }
                });
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
        LOG.info("Readings list: {}",readingsToSave);
        LOG.info("Reading to save meter: {}",readingsToSave.get(1).getReadingMeter());
        readingRepository.saveAll(readingsToSave);
    }

    private Reading createNewReading(Meter meterId, BigDecimal readingValue, ReadingSource readingSourceId) {
        LOG.info("Merged meter: {}",meterId);
        Reading newReading = new Reading();
        newReading.setReading(readingValue);
        newReading.setReadingCreatedtime(LocalDateTime.now());
        newReading.setReadingDate(LocalDateTime.now());
        newReading.setReadingMeter(meterId);
        newReading.setReadingSource(readingSourceId);
        return newReading;
    }
}

Repository:

public void saveAll(List<Reading> readings) {
        for (Reading estateReading : readings) {
            try {
                save(estateReading);
            }catch (Exception e){
                throw new RuntimeException("Error saving", e);
            }
        }
    }

I initially tried to create a query query in the database to save, but then I was told it was an error, and I am now trying to save the object via repository. but I got an error at the beginning with “my code entity in another entity get persist error” and I'm trying to merged entity first then persist it in another entity

Upvotes: 0

Views: 61

Answers (0)

Related Questions