1

私の現在の更新関数の保存部分 (flush: true と insert:true を試しました) では、試行するたびに挿入が実行されます。

更新したい列は主キーですが、mysql-database では、すべての外部キーの使用で 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: これは、私の休止状態が update-command で行うことです:

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

1 に答える 1

1

主キーを更新している場合、おそらくここで保存することはできません。おそらく、次のように executeUpdate で HQL を使用する必要があります。

Station.executeUpdate("update Station s set s.name=? where s.name=?", name2, name1)
于 2013-09-12T16:43:03.823 に答える