mysql - Grails Hibernate 插入而不是更新表

标签 mysql hibernate grails

在我当前更新函数的保存部分(我试过 flush: true 和 insert:true)每次我尝试时都会执行插入。

我要更新的列是一个主键,但在 mysql 数据库中,我在所有外键使用中都有 ON UPDATE CASCADE。

在grails或者其他地方还有什么需要注意的吗?

更新: 我有以下表格:

CREATE  TABLE IF NOT EXISTS `Station` (
  `Name` CHAR(50) NOT NULL ,
  `Location_Designation` CHAR(50) NOT NULL ,
  PRIMARY KEY (`Name`, `Location_Designation`) ,
  INDEX `fk_Station_Location1_idx` (`Location_Designation` ASC) ,
  CONSTRAINT `fk_Station_Location_LocatedIn`
    FOREIGN KEY (`Location_Designation` )
    REFERENCES `Location` (`Designation` )
    ON DELETE NO ACTION
    ON UPDATE CASCADE)
ENGINE = InnoDB;

CREATE  TABLE IF NOT EXISTS `Location` (
  `Designation` CHAR(50) NOT NULL ,
  PRIMARY KEY (`Designation`) )
ENGINE = InnoDB;

我的成绩单:

stationInstance.properties = params
//Station = "S1", Location="test"

if (!stationInstance.save(flush: true)) { // }

更新 2: 这是我的 hibernate 模式在更新命令中所做的:

Hibernate: select station_.name, station_.Location_Designation as Location2_2_ from station station_ where station_.name=?
Hibernate: insert into station (Location_Designation, name) values (?, ?)

最佳答案

如果您正在更新主键,您可能无法在此处保存。您可能需要像这样将 HQL 与 executeUpdate 一起使用:

Station.executeUpdate("update Station s set s.name=? where s.name=?", name2, name1)

关于mysql - Grails Hibernate 插入而不是更新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18767832/

相关文章:

grails - 如何创建 grails 项目的 javadoc

mysql - 使用 UNION 进行 3 种不同的输出

php - 虚构事件网站的事件预订

android - 应用程序在没有网络连接的情况下意外关闭

mysql - 对时间戳列进行 SELECT 查询,返回 GMT,而不是设置的时区

java - 枚举设计决策的常量特定方法

java - 有没有办法访问 Hibernate 中的子字段?

eclipse - 保存Grails项目时自动刷新浏览器?

java - Hibernate 多对多映射

grails - Groovy/Grails映射错误 'class'中的未知列 'field list'