Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 9073655
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 16, 20262026-06-16T18:27:58+00:00 2026-06-16T18:27:58+00:00

In a Maven-Spring-Hibernate-MySql running on Tomcat web app I’m using hibernate ddl to generate

  • 0

In a Maven-Spring-Hibernate-MySql running on Tomcat web app I’m using hibernate ddl to generate my DB schema with MySQL5InnoDBDialect.

The schema is generated just fine except the cascade option for foreign-keys. For example I have this structure:

A user object that holds user-details object, both sharing the same key:

@Entity
@Table(name = "Users")
public class User implements Serializable {

    private static final long serialVersionUID = -359364426541408141L;

    /*--- Members ---*/

    /**
     * The unique generated ID of the entity.
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "User_Id")
    protected long id;

    @Getter
    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "user", optional = true)
    protected UserDetails userDetails;

...

}

And the user-details:

@Entity
@Table(name = "UserDetails")
public class UserDetails implements Serializable {

    private static final long serialVersionUID = 957231221603878419L;

    /*--- Members ---*/

    /**
     * Shared Key
     */
    @Id
    @GeneratedValue(generator = "User-Primary-Key")
    @GenericGenerator(name = "User-Primary-Key", strategy = "foreign", parameters = { @Parameter(name = "property", value = "user") })
    @Column(name = "User_Id")
    protected long id;

    @Getter
    @Setter
    @OneToOne(optional = false, fetch = FetchType.LAZY)
    @PrimaryKeyJoinColumn
    private User user;

...

}

When generating the schema, the foreign-key from users-details table to users table is missing the cascading.

Here is the schema creation of the user-details:

CREATE TABLE `userdetails` (
  `User_Id` bigint(20) NOT NULL,
  `Creation_Time` bigint(20) NOT NULL,
  `EMail` varchar(128) DEFAULT NULL,
  `Enabled` bit(1) NOT NULL,
  `First_Name` varchar(15) DEFAULT NULL,
  `Last_Name` varchar(25) DEFAULT NULL,
  `Password` varchar(64) NOT NULL,
  `User_Name` varchar(15) NOT NULL,
  PRIMARY KEY (`User_Id`),
  UNIQUE KEY `User_Name` (`User_Name`),
  UNIQUE KEY `EMail` (`EMail`),
  KEY `FKAE447BD7BF9006F5` (`User_Id`),
  CONSTRAINT `FKAE447BD7BF9006F5` FOREIGN KEY (`User_Id`) REFERENCES `users` (`User_Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$

As you can see there isn’t any “ON DELETE CASCADE” written there in the “FOREIGN KEY” section.

This issue is also described here and here as well.

So I tried adding the @OnDelete annotation above the userDetails member with no luck..

I then created my own dialect overriding the supportsCascadeDelete:

public class MySql5Dialect extends MySQL5InnoDBDialect {

    public MySql5Dialect() {
    super();
    }

    @Override
    public String getTableTypeString() {
    return " ENGINE=InnoDB DEFAULT CHARSET=utf8";
    }

    @Override
    public boolean supportsCascadeDelete() {
    return true;
    }

}

But still with no change. My foreign key cascading option still set to “RESTRICT” after generating the schema:

enter image description here

Is there a way to resolve this issue (non-manually of course)?

UPDATE

Following Angel Villalain‘s suggestion I put the @OnDelete annotation above the “user” member of the UserDetails class and this did the trick for the OneToOne relation, the delete is cascaded, but the OnUpdate is set to restrict (still), which leads me to my first question – what is the meaning of that? I mean “OnDelete” is pretty straight forward – when I delete the parent delete the child as well, but what is the meaning of the “OnUpdate” option? How does it affect my app when it set to restrict/cascade?

My second question refers to cascading with a OneToMany relation. My User class hols many UserProviders.
The following code is from the User class:

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
@JoinTable(name = "Users_Providers", joinColumns = @JoinColumn(name = "User_Id"), inverseJoinColumns = @JoinColumn(name = "Provider_Id"))
protected Set<UserProvider> userProviders = new HashSet<>(0);

And this is the inverse relation, from the UserProvider class:

@ManyToOne(fetch = FetchType.LAZY)
@JoinTable(name = "Users_Providers", joinColumns = @JoinColumn(name = "Provider_Id", insertable = false, updatable = false), inverseJoinColumns = @JoinColumn(name = "User_Id"))
@OnDelete(action = OnDeleteAction.CASCADE)
protected User user;

So after using the @OnDelete annotation I expected to see the onDelete option with cascade in the join table, but it isn’t 🙁 Have I used it correctly?

Last question – What about unidirectional relation such as @ElementCollection?
My UserDetails class holds an ElementCollection of roles (each user can be assigned with one or more roles):

@ElementCollection(fetch = FetchType.EAGER, targetClass = Role.class)
@CollectionTable(name = "Users_Roles", joinColumns = @JoinColumn(name = "User_Id", referencedColumnName = "User_Id"))
@Column(name = "Role")
protected Set<Role> roles = new HashSet<Enums.Role>(0);

A Role is just an enum, not an entity hence I cannot point back from a role to the parent entity. In this case, is there a way to cascade the onDelete?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-16T18:28:00+00:00Added an answer on June 16, 2026 at 6:28 pm

    After investigating the issue I came up with the following methods to deal with DB schema generation (assuming you are using Hibernate as your JPA provider):

    • Using the ddl schema generation, you can generate your DB schema. Using this option the schema will be created/updated while you start your web-server. If you use this method, in order to make sure your onDelete option is set to cascade you can use the OnDelete annotation. This worked for me just fine for a OneToOne relation (thanks to Angel Villalain) but for some reason it didn’t work for a OneToMany relation. To workaround this gap I used Spring’s ResourceDatabasePopulator:

    enter image description here

    The db-additions.sql file contains the queries that adapt my DB, in my case create the Ondelete Cascade. For instance:

    ALTER TABLE `buysmartdb`.`users_providers` DROP FOREIGN KEY `FKB4152EEBBF9006F5` ;
    ALTER TABLE `buysmartdb`.`users_providers` 
      ADD CONSTRAINT `FKB4152EEBBF9006F5`
      FOREIGN KEY (`User_Id` )
      REFERENCES `buysmartdb`.`users` (`User_Id` )
      ON DELETE CASCADE
      ON UPDATE CASCADE;
    

    Notice that the scripts triggered by the ResourceDatabasePopulator applies after the schema is generated by Hibernate ddl, which is good. I know that sinply due to the final result, I couldn’t really make sure it is guaranteed.

    • A second method is to generate the schema using maven, in compile time. There are a few ways of doing that, such as this one or that one.

    I hope this will help someone..

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Want to fast implement little web-app using: Spring MVC GWT for frontend Hibernate Maven
I am using Hibernate / Spring / Maven / MySQL and unit tests with
We're using Maven/Surefire and Spring/Hibernate transactional tests for a fairly large web application. There
I want to use Maven 2 for buliding Web App using Spring 3.05 and
I'm setting up a maven-spring-hibernate-mysql-tomcat environment. I would like to inject my Entity manager
I am creating web application using Spring, Hibernate, Struts, and Maven. I get the
Currently we are building web services applications with Spring, Hibernate, MySQL and tomcat. We
I am creating a project using maven with spring and hibernate. I added a
I'm using Hibernate 3.3.1GA and Spring 3.0.2 (and Maven from eclipse). I added c3p0-0.9.1
I'm using Spring + Maven + Hibernate and want to run tests in a

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.