Hi Marianne, My *guess* is that the Rule class is not annotated as @PersistenceCapable but is serializable, and so DataNucleus is serializing the object as a byte[] array, and that is overflowing the limit for MySQL.
Double check what the schema is that's being created; you can get DN to log this by setting: log4j.logger.DataNucleus.Datastore.Schema=DEBUG, Console in WEB-INF/logging.properties . You could also set: log4j.logger.DataNucleus.Datastore.Native=DEBUG, Console in order to inspect the SQL INSERT statement. Let us know how you get on. Cheers Dan On 20 March 2015 at 09:35, Marianne Hagaseth < [email protected]> wrote: > Hi there, > I am trying to add this property (see code further down) and then using > mySQL for the persistence. > However, it fails with a MySQL error: "Specified key was too long; max key > length is 767 bytes" > > Anyone who have ideas for where to start searching for the error? > > Best, > Marianne Hagaseth. > > //region > rule (property) > private Rule rule; > @javax.jdo.annotations.Column(name="ruleId",allowsNull="true") > @MemberOrder(name="General", sequence="80") > public Rule getRule() { > return rule; > } > public void setRule(final Rule rule) { > this.rule = rule; > } > //endregion > > > > 10:20:45,861 [Schema main DEBUG] Execution Time = > 123 ms > 10:20:45,865 [Datastore main ERROR] An exception was > thrown while adding/validating class(es) : Specified key was too long; max > key length is 767 bytes > com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key > was too long; max key length is 767 bytes > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native > Method) > at > sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) > at > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) > at java.lang.reflect.Constructor.newInstance(Constructor.java:526) > > > at org.mortbay.jetty.Server.doStart(Server.java:224) > at > org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) > at > org.apache.isis.core.webserver.WebServerBootstrapper.bootstrap(WebServerBootstrapper.java:85) > at org.apache.isis.core.webserver.WebServer.run(WebServer.java:103) > at org.apache.isis.core.webserver.WebServer.main(WebServer.java:67) > at org.apache.isis.WebServer.main(WebServer.java:25) > > 10:20:45,865 [Datastore main ERROR] An exception was > thrown while adding/validating class(es) : Specified key was too long; max > key length is 767 bytes > com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key > was too long; max key length is 767 bytes > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native > Method) > at > sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) > at > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) > at java.lang.reflect.Constructor.newInstance(Constructor.java:526) > at com.mysql.jdbc.Util.handleNewInstance(Util.java:377) > at com.mysql.jdbc.Util.getInstance(Util.java:360) > at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:978) > > > Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: > Specified key was too long; max key length is 767 bytes > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native > Method) > at > sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) > at > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) > at java.lang.reflect.Constructor.newInstance(Constructor.java:526) > ... 54 more > 10:20:46,204 [WicketFilter main ERROR] The initialization > of an application with name 'WicketFilter' has failed. > com.google.inject.ProvisionException: Guice provision errors: > > 1) Error in custom provider, > org.datanucleus.exceptions.NucleusDataStoreException: Error(s) were found > while auto-creating/validating the datastore for classes. The errors are > printed in the log, and are attached to this exception. > at > org.apache.isis.core.runtime.runner.IsisInjectModule.provideIsisSystem(IsisInjectModule.java:132) > > > //region > rule (property) > private Rule rule; > @javax.jdo.annotations.Column(name="ruleId",allowsNull="true") > @MemberOrder(name="General", sequence="80") > public Rule getRule() { > return rule; > } > public void setRule(final Rule rule) { > this.rule = rule; > } > //endregion > > >
