sql - JPA forming query which fails at program running -
i doing following query in jpa:
@namedquery(name = playerskill.delete_all_bot_data, query = "delete playerskill s s.player.id " + "in (select p.id player p p.team.id " + "in (select t.id manager m join m.teaminfo t m.localuserid null))")
and receiving following exception when calling appropriate dao function, calling jpa named query using executeupdate:
7818 [thread-12] warn o.h.e.jdbc.spi.sqlexceptionhelper - sql error: 0, sqlstate: 42601 7818 [thread-12] error o.h.e.jdbc.spi.sqlexceptionhelper - error: syntax error @ or near "cross" position: 30 7828 [thread-12] error c.m.s.threads.serverinitializer - null javax.persistence.persistenceexception: org.hibernate.exception.sqlgrammarexception: not execute statement @ org.hibernate.ejb.abstractentitymanagerimpl.convert(abstractentitymanagerimpl.java:1387) ~[abstractentitymanagerimpl.class:4.2.8.final] @ org.hibernate.ejb.abstractentitymanagerimpl.convert(abstractentitymanagerimpl.java:1310) ~[abstractentitymanagerimpl.class:4.2.8.final] @ org.hibernate.ejb.abstractentitymanagerimpl.throwpersistenceexception(abstractentitymanagerimpl.java:1397) ~[abstractentitymanagerimpl.class:4.2.8.final] @ org.hibernate.ejb.abstractqueryimpl.executeupdate(abstractqueryimpl.java:111) ~[abstractqueryimpl.class:4.2.8.final] @ com.magnifi.pennantrace.dao.player.playerskilldao.deletebotteamsdata(playerskilldao.java:25) ~[playerskilldao.class:na] @ com.magnifi.schedserv.seasonstartend.seasongeneration.deleteallbotrelateddata(seasongeneration.java:1457) ~[seasongeneration.class:na] @ com.magnifi.schedserv.seasonstartend.seasongeneration.generateseason(seasongeneration.java:109) ~[seasongeneration.class:na] @ com.magnifi.schedserv.threads.serverinitializer.generateendstart(serverinitializer.java:161) [serverinitializer.class:na] @ com.magnifi.schedserv.threads.serverinitializer.initsystem(serverinitializer.java:80) [serverinitializer.class:na] @ com.magnifi.schedserv.threads.schedulerthread.run(schedulerthread.java:38) [schedulerthread.class:na] caused by: org.hibernate.exception.sqlgrammarexception: not execute statement @ org.hibernate.exception.internal.sqlstateconversiondelegate.convert(sqlstateconversiondelegate.java:123) ~[sqlstateconversiondelegate.class:4.2.8.final] @ org.hibernate.exception.internal.standardsqlexceptionconverter.convert(standardsqlexceptionconverter.java:49) ~[standardsqlexceptionconverter.class:4.2.8.final] @ org.hibernate.engine.jdbc.spi.sqlexceptionhelper.convert(sqlexceptionhelper.java:125) ~[sqlexceptionhelper.class:4.2.8.final] @ org.hibernate.engine.jdbc.spi.sqlexceptionhelper.convert(sqlexceptionhelper.java:110) ~[sqlexceptionhelper.class:4.2.8.final] @ org.hibernate.engine.jdbc.internal.resultsetreturnimpl.executeupdate(resultsetreturnimpl.java:189) ~[resultsetreturnimpl.class:4.2.8.final] @ org.hibernate.hql.internal.ast.exec.basicexecutor.doexecute(basicexecutor.java:108) ~[basicexecutor.class:4.2.8.final] @ org.hibernate.hql.internal.ast.exec.basicexecutor.execute(basicexecutor.java:77) ~[basicexecutor.class:4.2.8.final] @ org.hibernate.hql.internal.ast.exec.deleteexecutor.execute(deleteexecutor.java:124) ~[deleteexecutor.class:4.2.8.final] @ org.hibernate.hql.internal.ast.querytranslatorimpl.executeupdate(querytranslatorimpl.java:415) ~[querytranslatorimpl.class:4.2.8.final] @ org.hibernate.engine.query.spi.hqlqueryplan.performexecuteupdate(hqlqueryplan.java:282) ~[hqlqueryplan.class:4.2.8.final] @ org.hibernate.internal.sessionimpl.executeupdate(sessionimpl.java:1215) ~[sessionimpl.class:4.2.8.final] @ org.hibernate.internal.queryimpl.executeupdate(queryimpl.java:116) ~[queryimpl.class:4.2.8.final] @ org.hibernate.ejb.queryimpl.internalexecuteupdate(queryimpl.java:198) ~[queryimpl.class:4.2.8.final] @ org.hibernate.ejb.abstractqueryimpl.executeupdate(abstractqueryimpl.java:102) ~[abstractqueryimpl.class:4.2.8.final] ... 6 common frames omitted caused by: org.postgresql.util.psqlexception: error: syntax error @ or near "cross" position: 30 @ org.postgresql.core.v3.queryexecutorimpl.receiveerrorresponse(queryexecutorimpl.java:2161) ~[postgresql-9.3-1101.jdbc4.jar:na] @ org.postgresql.core.v3.queryexecutorimpl.processresults(queryexecutorimpl.java:1890) ~[postgresql-9.3-1101.jdbc4.jar:na] @ org.postgresql.core.v3.queryexecutorimpl.execute(queryexecutorimpl.java:255) ~[postgresql-9.3-1101.jdbc4.jar:na] @ org.postgresql.jdbc2.abstractjdbc2statement.execute(abstractjdbc2statement.java:559) ~[postgresql-9.3-1101.jdbc4.jar:na] @ org.postgresql.jdbc2.abstractjdbc2statement.executewithflags(abstractjdbc2statement.java:417) ~[postgresql-9.3-1101.jdbc4.jar:na] @ org.postgresql.jdbc2.abstractjdbc2statement.executeupdate(abstractjdbc2statement.java:363) ~[postgresql-9.3-1101.jdbc4.jar:na] @ org.apache.tomcat.dbcp.dbcp2.delegatingpreparedstatement.executeupdate(delegatingpreparedstatement.java:100) ~[tomcat-dbcp.jar:8.0.3] @ org.apache.tomcat.dbcp.dbcp2.delegatingpreparedstatement.executeupdate(delegatingpreparedstatement.java:100) ~[tomcat-dbcp.jar:8.0.3] @ org.hibernate.engine.jdbc.internal.resultsetreturnimpl.executeupdate(resultsetreturnimpl.java:186) ~[resultsetreturnimpl.class:4.2.8.final] ... 15 common frames omitted 7832 [thread-12] error c.m.s.threads.schedulerthread - null javax.persistence.rollbackexception: transaction marked rollbackonly @ org.hibernate.ejb.transactionimpl.commit(transactionimpl.java:72) ~[transactionimpl.class:4.2.8.final] @ com.magnifi.schedserv.threads.schedulerthread.run(schedulerthread.java:39) ~[schedulerthread.class:na]
the real sql query on exception is:
delete bb_player_skills cross join bb_players player1_ id in (select player2_.id bb_players player2_ player2_.team_id in (select teaminfo4_.id bb_manager manager3_ inner join bb_team_info teaminfo4_ on manager3_.bb_team_info_id=teaminfo4_.id manager3_.local_user_id null))
i can't understand why forming query using "cross" says in error log. different table same query works well:
@namedquery(name=playerstat.delete_bot_data, query = "delete playerstat s s.player.id " + "in (select p.id player p p.team.id " + "in (select t.id manager m join m.teaminfo t m.localuserid null))")
and real sql formed query not containing "cross":
delete bb_player_stat bb_players_id in (select player1_.id bb_players player1_ player1_.team_id in (select teaminfo3_.id bb_manager manager2_ inner join bb_team_info teaminfo3_ on manager2_.bb_team_info_id=teaminfo3_.id manager2_.local_user_id null))
the relation of tables same also: player skill 1 one players , same player stat
edit: player skills (the 1 cross used) entity:
@json(include=false) private player player; @id @onetoone(fetch=fetchtype.lazy) @joincolumn(name="bb_players_id", nullable=false) public player getplayer() { return this.player; }
and playerstat:
private player player; @onetoone(fetch=fetchtype.lazy) @joincolumn(name="bb_players_id", nullable=false) public player getplayer() { return this.player; }
in player entity:
@onetoone(mappedby="player", fetch=fetchtype.lazy, cascade=cascadetype.all) public playerskill getplayerskill() { return this.playerskill; } @onetoone(mappedby="player", cascade=cascadetype.all) public playerstat getplayerstats() { return this.playerstats; }
Comments
Post a Comment