Hibernate框架实体类在创建对应的数据库表时,无论是一对多还是多对一关联关系,采取的都是双向外键维护,虽然双向外键维护使用起来比较方便,但是,双向外键会浪费更多的资源即对外键的修改会用两次操作,通过在<set>标签里面设置inverse属性可以使“一”的那一方放弃对外键的维护,可以使系统对外键只进行一次修改,同样相应生成的SQL语句也会由两条减少到一条,当这种情况足够多时会使系统的性能得到极大的提高。
例如Hibernate框架的有两个实体类Company()和Employee( ),这两个实体类生成的对应的数据库表为表company和表employee。表company中有两个数据(1,腾讯)和(2,阿里巴巴)(1,2数字表示是主键);表employee中有一条数据(一,小朱,1)(一表示主键,1表示外键对应company中的主键,表示就职公司),当这个员工小猪从腾讯跳槽到阿里巴巴的时候,如果采用的是双向外键维护,会对company和employee两个表中的有关外键的地方同时做改变,因此相应生成的SQL语句也有两条,此时如果让“一”的一方即company放弃对外键的维护,可以使修改只在employee表中的数据即将(一,小朱,1)直接将1变为2,生成的SQL语句也只有一条更新语句。
对inverse属性的设置也是在响应的“一”实体类对应的映射文件之中(默认情况下inverse是关闭的):
<set name="员工" inverse="true"> <key column="外键"> <one-to-many class="员工类的全路径"> </set>