这是一项新功能,用于指定在插入或更新到一行之前检查值的条件。如果表的任何行的搜索条件的结果为 FALSE,则约束可能返回错误(但如果结果为 UNKNOWN 或 TRUE,则约束不会返回错误)。此功能开始在 MySQL 8.0.16 上运行,在以前的版本中,我们可以创建它,但它不起作用,这意味着支持语法,但不起作用。要牢记的使用规则:
AUTO_INCREMENT 自增列不允许使用
引用另一个表中的另一列不允许使用
存储的函数和用户定义的函数不允许使用
存储过程和函数参数不允许使用
子查询不允许使用
在外键中用于后续 *** 作(ON UPDATE,ON DELETE)的列不允许使用
为下一条语句 INSERT,UPDATE,REPLACE,LOAD DATA 和 LOAD XML 评估此次监测。此外,还会为 INSERT IGNORE,UPDATE IGNORE,LOAD DATA…IGNORE 和 LOAD XML…IGNORE 评估此监测约束。对于这些语句,如果约束的评估结果为 FALSE,则会发生警告。插入或更新被跳过。
我们可以使用此功能在表中添加更多的逻辑,但是根据我以前作为程序员的经验,我不建议在表中添加逻辑,因为除非您无法访问应用程序代码,否则很难找到或调试错误。
查了一些资料以后,我在映射文件中将外键的not-null属性设置成了false,可是在添加这条Project记录以后查询还是会会出现问题:277 ERROR ProjectDao:116 -可以确定是因为外键为空导致的问题,因为在手动设置外键以后这个问题就解决了这样的话,级联关系都交给hibernate吧,数据库就不要主外键了,麻烦还有设计的时候建议加一个表 project2person,这样看着,用着都舒服,方便扩展我用的就是Hibernate,映射文件是这样的:<class name="UserDao" table="t_user"<id name="id"<generator class="native"/</id<property name="name" column="t_name"/<property name="password" column="t_password"/<set name="projects" inverse="true" cascade="all"<key column="user_id"/<one-to-many class="ProjectDao"/</set</class<class name="ProjectDao" table="t_project"<id name="id"<generator class="native"/</id<!-- 基本信息 --<property name="name" column="t_name"/<property name="code" column="t_code"/不会光用ibernate那个自动生成的hbm吧映射关系可以自己手动去写呀你就用这个就可以了,数据库的外键去掉没有事~意思是直接对数据库 *** 作把外键去掉?我试试……问题补充:xiaofengxp 写道确实你的数据库表结构中的外键字段是否允许为空。在映射文件中的not-null="false"只对持久化对象的关联外键属性做检查,而不会对表结构做检查。或者重新生成Schema,应该可能解决问题我是使用的Hibernate的工具类自动生成的Schema,而且是重新生成的。not-null="false"并不能改变生成Schema的过程,只能手动将数据库中外键设置为delete set null,但是更改后还是不可以啊,还是产生同样的错误啊欢迎分享,转载请注明来源:内存溢出
评论列表(0条)