"cascade" on a collection of children, means that, whatever operation you perform in the parent, it will pass on to the children.
This is unrelated to DDL. Table creation, etc, is managed by other settings.
Id's are also unrelated to this command, they can be assigned or auto-generated, according to the strategy you specify in the mapping file.
cascade=none means that no parent operation is repeated on the children.
cascade=all means that all operations (save, persist, update, delete, merge) are repeated on the children.
The "inverse" property is used in bi-directional associations. This is, relations for which you have both parent.getChildren() and child.getParent().
When you are adding a new child, Hibernate expects you to take care, from the Java point of view, of both aspects of this association.
In other words, you have to do not only this
Code:
1. parent.children.add(child)
but also this
Code:
2. child.setParent(parent)
Hibernate has to detect that a child has been added, and generate the proper SQL. The problem is when to generate that SQL. In a unidirectional relationship, the only code you need is 1, so the SQL is generated there.
In a bidirectional relationship, you have both code 1. and 2., and Hibernate has to choose at which moment it generates the SQL.
If we set 1. (the one-to-many side) as "inverse", Hibernate will only generate SQL code when 2. occurs.