mysql - Play Framework CRUD search issue -
when trying search on entities in crud module of play i'm getting exception:
play.exceptions.javaexecutionexception: org.hibernate.exception.sqlgrammarexception: not execute query @ play.mvc.actioninvoker.invoke(actioninvoker.java:290) @ invocation.http request(play!) caused by: javax.persistence.persistenceexception: org.hibernate.exception.sqlgrammarexception: not execute query @ org.hibernate.ejb.abstractentitymanagerimpl.convert(abstractentitymanagerimpl.java:1235) @ org.hibernate.ejb.abstractentitymanagerimpl.convert(abstractentitymanagerimpl.java:1168) @ org.hibernate.ejb.queryimpl.getresultlist(queryimpl.java:250) @ play.db.jpa.jpaplugin$jpamodelloader.fetch(jpaplugin.java:431) @ controllers.crud$objecttype.findpage(crud.java:253) @ controllers.crud.list(crud.java:36) @ play.mvc.actioninvoker.invokecontrollermethod(actioninvoker.java:413) @ play.mvc.actioninvoker.invokecontrollermethod(actioninvoker.java:408) @ play.mvc.actioninvoker.invoke(actioninvoker.java:182) ... 1 more caused by: org.hibernate.exception.sqlgrammarexception: not execute query @ org.hibernate.exception.sqlstateconverter.convert(sqlstateconverter.java:92) @ org.hibernate.exception.jdbcexceptionhelper.convert(jdbcexceptionhelper.java:66) @ org.hibernate.loader.loader.dolist(loader.java:2452) @ org.hibernate.loader.loader.listignorequerycache(loader.java:2192) @ org.hibernate.loader.loader.list(loader.java:2187) @ org.hibernate.loader.hql.queryloader.list(queryloader.java:452) @ org.hibernate.hql.ast.querytranslatorimpl.list(querytranslatorimpl.java:363) @ org.hibernate.engine.query.hqlqueryplan.performlist(hqlqueryplan.java:196) @ org.hibernate.impl.sessionimpl.list(sessionimpl.java:1258) @ org.hibernate.impl.queryimpl.list(queryimpl.java:102) @ org.hibernate.ejb.queryimpl.getresultlist(queryimpl.java:241) ... 7 more caused by: com.mysql.jdbc.exceptions.jdbc4.mysqlsyntaxerrorexception: unknown column 'charset' in 'where clause' @ com.mysql.jdbc.util.handlenewinstance(util.java:409) @ com.mysql.jdbc.util.getinstance(util.java:384) @ com.mysql.jdbc.sqlerror.createsqlexception(sqlerror.java:1054) @ com.mysql.jdbc.mysqlio.checkerrorpacket(mysqlio.java:3566) @ com.mysql.jdbc.mysqlio.checkerrorpacket(mysqlio.java:3498) @ com.mysql.jdbc.mysqlio.sendcommand(mysqlio.java:1959) @ com.mysql.jdbc.mysqlio.sqlquerydirect(mysqlio.java:2113) @ com.mysql.jdbc.connectionimpl.execsql(connectionimpl.java:2568) @ com.mysql.jdbc.preparedstatement.executeinternal(preparedstatement.java:2113) @ com.mysql.jdbc.preparedstatement.executequery(preparedstatement.java:2275) @ org.hibernate.jdbc.abstractbatcher.getresultset(abstractbatcher.java:208) @ org.hibernate.loader.loader.getresultset(loader.java:1869) @ org.hibernate.loader.loader.doquery(loader.java:718) @ org.hibernate.loader.loader.doqueryandinitializenonlazycollections(loader.java:270) @ org.hibernate.loader.loader.dolist(loader.java:2449) ... 15 more the odd thing search works entities , not others. example, following entity adding string in search box works:
@entity public class act extends model { @transient private static final int page_size = integer.parseint(play.configuration.getproperty("pagination.size","10")); @required(message = "act.name.required") public string name; @required(message = "act.description.required") @lob @maxsize(value=500, message="act.description.maxsize") public string description; public blob image; public boolean showinclosedmode; @temporal(temporaltype.timestamp) public date updated; @required(message = "act.theatre.required") @manytoone public theatre theatre; public boolean disabled; @onetomany(mappedby="act") public list<offer> offers; @manytomany(cascade=cascadetype.persist) public set<tag> tags; @transient public string taglistsupport; [... methods ...] } but not one:
@entity public class user extends model { @required(message = "user.name.required") public string name; @email(message = "user.email.invalid") public string email; public string preflang; public long prefcity; public int credits; public date lastlogin; @nobinding("profile") public boolean disabled; @nobinding("profile") public boolean admin; @nobinding("profile") public boolean anonymous; @onetomany(mappedby = "owner") public list<ticket> tickets; @manytomany public list<theatre> theatres; public string googleid; public string yahooid; public string facebookid; public string twitterid; public string twitter_token; public string twitter_secret; public string username; public string password; @onetomany(mappedby = "user") public list<event> history; [...methods...] } any idea why happens?
my guess database using not having table named "user" when don't provide specific name table. know postgres not allow "user" table because "user" keyword. i'm not sure mysql. try adding javax.persistence.table annotation after @entity annotation in user class:
@entity @table(name = "my_user") public class user extends model { ... } where give whatever name want not "user". alternatively (but not tested) may able wrap "user" name in quotes:
@entity @table(name = "\"user\"") public class user extends model { ... }
Comments
Post a Comment