一对多 <class name="Question" table="questions" dynamic-insert="true" dynamic-update="true"> <id name="id" column="id"> <generator class="native" /> </id> <property name="title" /> <property name="content" /> <many-to-one name="user" column="user_id" class="User" /> </class>
<class name="User" table="users"> <id name="id"> <generator class="native" /> </id> <property name="name" /> <property name="phone" /> <set name="questions" table="questions" cascade="save-update" inverse="false" lazy="false"> <key column="user_id" /> <one-to-many class="Question" /> </set> </class>
user和question是一对多,在多的这一方不能设置casecade,如果设置了cascade="save-update",user删除,question因为外键关联就会报错,user也不会被删除。如果设置了cascade="delete",user删除,question也会一块删除。
不设置,user删除,question的外键user_id会置为null。如果不需要级联删除应该不加cascade。不设置的话,创建question,如果新建一个user,并为其设置了user属性,但并不会创建user
多对多
通过创建中间表users_roles 进行关联,删除其中的任何一个,中间表中包含对应id的记录都会被删掉
在user中给role设置 cascade="save-update",可以由新建user、连带着建role,但role里面没设置,就不能由新建role,来建user
<class name="User" table="users"> <id name="id"> <generator class="native" /> </id> <property name="name" /> <set name="roles" table="users_roles" lazy="false" cascade="save-update"> //如果配置了save-update,则删除role会出现关联错误,所以如果不是必须可以不加casecade <key column="user_id"></key> <many-to-many class="Role" column="role_id"> </many-to-many> </set> </class>
<class name="Role" table="roles" dynamic-insert="true" dynamic-update="true"> <id name="id" column="id"> <generator class="native" /> </id> <property name="name" /> <set name="users" table="users_roles" lazy="false"> <key column="role_id"></key> <many-to-many class="User" column="user_id"> </many-to-many> </set> </class>