hibernate 自动建表,外键无效

问题:使用hibrenate自主建了两个表 customer 和 linkman,一条客户记录可以对应多个linkman信息,linkman有外键指向customer的id,使用hibernate删除customer数据,居然成功了,外键约束没有用。(这里删除的customer数据,在linkman中有对应数据的)

解决步骤:

第一步:

查看sql发现 建表使用的数据库引擎:engine=MyISAM,但是约束只在engine=InnoDB时才有效;将数据库方言作如下修改

mysql版本:mysql-5.7
数据库方言:org.hibernate.dialect.MySQL57Dialect

mysql版本:mysql-5.5
数据库方言:org.hibernate.dialect.MySQL55Dialect

使用上面两种方式 hibernate自主建表的时候 数据库的引擎:engine=InnoDB

此时 在数据库中外键约束起作用了,但是使用hibernate的api 依旧能删除,外键约束还是不起作用。

第二步:
customer和linkman是一对多的关系, hibernat默认customer和linkman都会对外键进行维护,此时让customer,也就是一的一方,放弃对外键的维护:设置inverse=”true”

<!--inverse属性:配置关系是否维护
                true:customer不维护关系
                false(默认值):customer维护关系

            inverse属性:性能优化,提高关系维护的性能,
            原则:必须至少有一方维护关系
            一对多关系中:一的一方放弃,也只能一的一方放弃,多的一方不能放弃
        -->
        <set name="linkMans" inverse="true">
            <key>
                <column name="lkm_cust_id"></column>
            </key>
            <one-to-many class="LinkMan"></one-to-many>
        </set>

inverse属性默认是false,在执行删除操作的时候,会将相关外键置空,就能删除了

这样外键就可以生效了!

扫描二维码关注公众号,回复: 1790890 查看本文章

猜你喜欢

转载自blog.csdn.net/fighting_sxw/article/details/80636088