spring - Hibernate 4 Annotation - MySQL Configuration Error: java.sql.SQLException: Cannot add foreign key constraint -


i getting configuration stacktrace error when try load spring boot application hibernate 4 - mysql configuration. can't figure out causing foreign key constraint problem. any appreciated!

**caused by: java.sql.sqlexception: cannot add foreign key constraint @ com.mysql.jdbc.sqlerror.createsqlexception(sqlerror.java:963) @ com.mysql.jdbc.mysqlio.checkerrorpacket(mysqlio.java:3966) @ com.mysql.jdbc.mysqlio.checkerrorpacket(mysqlio.java:3902) @ com.mysql.jdbc.mysqlio.sendcommand(mysqlio.java:2526) @ com.mysql.jdbc.mysqlio.sqlquerydirect(mysqlio.java:2673) @ com.mysql.jdbc.connectionimpl.execsql(connectionimpl.java:2545) @ com.mysql.jdbc.connectionimpl.execsql(connectionimpl.java:2503) @ com.mysql.jdbc.statementimpl.executeinternal(statementimpl.java:839) @ com.mysql.jdbc.statementimpl.execute(statementimpl.java:739) @ org.hibernate.tool.schema.internal.exec.generationtargettodatabase.accept(generationtargettodatabase.java:49) ...** 

here 3 database tables:

enter image description here

principal entity

@entity public class principal implements {  @id @generatedvalue(strategy = generationtype.auto) private long principal_id;  @column(name = "username", unique = true, nullable = false) private string name;  @column(unique = true, nullable = false) private string email;  @column(nullable = false) private string password;  @column(nullable = false) private boolean locked;  @manytomany( fetch = fetchtype.eager) @jointable(joincolumns = { @joincolumn(name = "principal_id", referencedcolumnname = "principal_id") }, inversejoincolumns = { @joincolumn(name = "role_id", referencedcolumnname = "role_id") }) private set<role> roles;   public principal() {     super();      locked = false; }  public principal(final string nametoset, final string passwordtoset, final set<role> rolestoset) {     super();      name = nametoset;     password = passwordtoset;     roles = rolestoset; }  public principal(final userdto userdto) {     super();      name = userdto.getname();     password = userdto.getpassword();     roles = userdto.getroles(); }  @override public long getid() {     return principal_id; }  @override public void setid(final long idtoset) {     principal_id = idtoset; }  @override public string getname() {     return name; }  public void setname(final string nametoset) {     name = nametoset; }  public string getemail() {     return email; }  public void setemail(final string emailtoset) {     email = emailtoset; }  public string getpassword() {     return password; }  public void setpassword(final string passwordtoset) {     password = passwordtoset; }  public set<role> getroles() {     return roles; }  public void setroles(final set<role> rolestoset) {     roles = rolestoset; }  public boolean getlocked() {     return locked; }  public void setlocked(final boolean lockedtoset) {     locked = lockedtoset; }  } 

role entity

@entity public class role implements inameableentity, inameabledto {  @id @generatedvalue(strategy = generationtype.auto) private long role_id;  @column(unique = true, nullable = false) @size(min = 2, max = 30) @notnull private string name;  public role() {     super(); }  public role(final string nametoset) {     super();     name = nametoset; }  // api  @override public long getid() {     return role_id; }  @override public void setid(final long idtoset) {     role_id = idtoset; }  @override public string getname() {     return name; }  public void setname(final string nametoset) {     name = nametoset; } 

persistence-mysql.properties

jdbc.driverclassname=com.mysql.jdbc.driver jdbc.url=jdbc:mysql://localhost:3306/qlc?&usessl=false jdbc.username=root jdbc.password=password   hibernate.dialect=org.hibernate.dialect.mysql5dialect hibernate.show_sql=true hibernate.hbm2ddl.auto=update  jpa.generateddl=true 

umpersistencejpaconfig.java

@configuration @enabletransactionmanagement @componentscan({ "org.qlc.um.persistence" }) @propertysource({ "persistence-mysql.properties" }) @enablejparepositories(basepackages = "org.qlc.um.persistence.dao") public class umpersistencejpaconfig {  @autowired private environment env;  public umpersistencejpaconfig() {     super(); }  // beans  @bean public localcontainerentitymanagerfactorybean entitymanagerfactory() {     final localcontainerentitymanagerfactorybean em = new localcontainerentitymanagerfactorybean();     em.setdatasource(datasource());     em.setpackagestoscan(new string[] { "org.qlc.um" });     final hibernatejpavendoradapter vendoradapter = new hibernatejpavendoradapter();     em.setjpavendoradapter(vendoradapter);     em.setjpaproperties(additionalproperties());     return em; }  @bean public datasource datasource() {     final drivermanagerdatasource datasource = new drivermanagerdatasource();     datasource.setdriverclassname(env.getproperty("jdbc.driverclassname"));     datasource.seturl(env.getproperty("jdbc.url"));     datasource.setusername(env.getproperty("jdbc.username"));     datasource.setpassword(env.getproperty("jdbc.password"));     return datasource; }  @bean public jpatransactionmanager transactionmanager() {     final jpatransactionmanager transactionmanager = new jpatransactionmanager();     transactionmanager.setentitymanagerfactory(entitymanagerfactory().getobject());     return transactionmanager; }  @bean public persistenceexceptiontranslationpostprocessor exceptiontranslation() {     return new persistenceexceptiontranslationpostprocessor(); }  //  final properties additionalproperties() {     final properties hibernateproperties = new properties();     hibernateproperties.setproperty("hibernate.hbm2ddl.auto", env.getproperty("hibernate.hbm2ddl.auto", "create-drop"));     hibernateproperties.setproperty("hibernate.dialect", env.getproperty("hibernate.dialect"));      // setproperty("hibernate.hbm2ddl.auto", hibernatehbm2ddlauto);     // setproperty("hibernate.ejb.naming_strategy", org.hibernate.cfg.improvednamingstrategy.class.getname());     return hibernateproperties; }  } 

my guess, since have not marked @column in id of entity taking default property name of getter 'id'

try, principal

@id @generatedvalue(strategy = generationtype.auto) column(name="principal_id") private long principal_id; 

role

@id @generatedvalue(strategy = generationtype.auto) column(name="role_id") private long role_id; 

Comments

Popular posts from this blog

sql server - Cannot query correctly (MSSQL - PHP - JSON) -

php - trouble displaying mysqli database results in correct order -

C++ Linked List -