一对多    <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>
05-14 09:33