Hi,
ich habe eine Tabelle mit aktuell > 25.000 Datensätzen, gegen welche ich folgende Query ausführe:
Ziel ist, sämtliche Customer herauszufiltern, welche nach bestimmten Kriterien als ähnlich bzw. gleich gelten (Vor- und Nachname gleich oder Email gleich oder Nachname und Adresse gleich).
Problem:
Die Abfrage dauert ewig und bricht irgendwann ab mit diesem Stacktrace:
Laut StackOverflow ist das schlicht ein Timeout. Aber wie umgehe ich das? Wie bekomme ich trotzdem sämtliche Daten?
ich habe eine Tabelle mit aktuell > 25.000 Datensätzen, gegen welche ich folgende Query ausführe:
Code:
@Query("SELECT a FROM Customer a, Customer b "
+ "WHERE ("
+ "lower(a.email) = lower(b.email) OR "
+ "(lower(a.firstName) = lower(b.firstName) AND lower(a.lastName) = lower(b.lastName)) OR "
+ "(lower(a.lastName) = lower(b.lastName) AND lower(a.street) = lower(b.street))"
+ ") "
+ "AND a.id != b.id")
Ziel ist, sämtliche Customer herauszufiltern, welche nach bestimmten Kriterien als ähnlich bzw. gleich gelten (Vor- und Nachname gleich oder Email gleich oder Nachname und Adresse gleich).
Problem:
Die Abfrage dauert ewig und bricht irgendwann ab mit diesem Stacktrace:
Code:
Last packet sent to the server was 0 ms ago.
2015-12-21 09:39:50,302 [http-bio-8080-exec-1] WARN org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL Error: 0, SQLState: null
2015-12-21 09:39:50,303 [http-bio-8080-exec-1] ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper - Connection has already been closed.
2015-12-21 09:40:01,444 [http-bio-8080-exec-1] WARN uncaughtException - Handler execution resulted in exception, request: GET:/customer/similiar_customers
org.springframework.orm.jpa.JpaSystemException: could not inspect JDBC autocommit mode; nested exception is org.hibernate.exception.GenericJDBCException: could not inspect JDBC autocommit mode
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:303) ~[spring-orm-4.1.3.RELEASE.jar:4.1.3.RELEASE]
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:214) ~[spring-orm-4.1.3.RELEASE.jar:4.1.3.RELEASE]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:417) ~[spring-orm-4.1.3.RELEASE.jar:4.1.3.RELEASE]
Caused by: org.hibernate.exception.GenericJDBCException: could not inspect JDBC autocommit mode
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54) ~[hibernate-core-4.3.1.Final.jar:4.3.1.Final]
Caused by: java.sql.SQLException: Connection has already been closed.
Laut StackOverflow ist das schlicht ein Timeout. Aber wie umgehe ich das? Wie bekomme ich trotzdem sämtliche Daten?