无法重定向对象[ManageVehicle :( unsaved)]它不是域或没有标识符。请改用显式重定向

时间:2015-05-13 13:08:53

标签: grails gorm grails-domain-class grails-controller

这是我的域名。

CREATE VIEW ralib.shpfrtn AS
    SELECT T01.IDORD#, T01.IDDOCD, T01.IDPRT#, 
           T01.IDSFX#, T01.IDSHP#, T01.IDNTU$, T01.IDENT# ,
           (T01.IDNTU$ * T01.IDSHP# ) AS LINTOT, 
           T02.IARCC3, T02.IAPRLC , T01.IDORDT, T01.IDHCD3 
    FROM ASTDTA.OEINDLID T01
      INNER JOIN ASTDTA.ICPRTMIA T02 ON T01.IDPRT# = T02.IAPRT# 
    WHERE t01.iddocd > 20131231
      AND t01.IDHCD3 = 'MDL'    
      AND t01.idord# NOT IN (SELECT t01.idord# FROM astdta.oeindlid b
                             WHERE idprt# = 'FRTCRDM')

我在控制器中的保存方法是。

import org.apache.commons.lang.builder.EqualsBuilder
import org.apache.commons.lang.builder.HashCodeBuilder

class ManageVehicle implements Serializable {
    String vehicle
    Short truckKey=0
    Short siteID
    Integer unitID
    String wheelConfig
    String model
    Short period=0
    String usid=UUID.randomUUID().toString()
    //static belongsTo = [wheelConfig : TTType,model:TTModel]
    int hashCode() {
        def builder = new HashCodeBuilder()
        builder.append truckKey
        builder.append siteID
        builder.toHashCode()
    }

    boolean equals(other) {
        if (other == null) return false
        def builder = new EqualsBuilder()
        builder.append truckKey, other.truckKey
        builder.append siteID, other.siteID
        builder.isEquals()
    }

    static mapping = {
        table 'TF_Truck'
        version false
        truckKey column :'TruckKey'
        siteID column :'SiteID'
        id composite:['truckKey','siteID']
        vehicle column: 'TruckID' ,sqlType: 'nvarchar'
        wheelConfig column: 'TypID',sqlType: 'tinyint'
        model column: 'ModID' ,sqlType: 'tinyint'
        unitID column: 'McmID',sqlType: 'tinyint'
        period column: 'Period'
        usid generator: 'assigned', column:'USID', sqlType:'uniqueidentifier'
    }
    static constraints = {
        period nullable: false
        truckKey nullable: false
        siteID nullable: false
    }
}

当我在这个域上应用保存操作时,我遇到了异常。

def save(ManageVehicle manageVehicleInstance) {
    manageVehicleInstance.siteID=RequestContextHolder.currentRequestAttributes().getAttribute("SiteID",RequestAttributes.SCOPE_SESSION) as Short
    if (manageVehicleInstance == null) {
        notFound()
        return
    }

    if (manageVehicleInstance.hasErrors()) {
        respond manageVehicleInstance.errors, view:'create'
        return
    }

    manageVehicleInstance.save(flush:true,failOnError: true)

    request.withFormat {
        form {
            flash.message = message(code: 'default.created.message', args: [message(code: 'manageVehicle.label', default: 'Manage Vehicle'), manageVehicleInstance.id])
            redirect manageVehicleInstance
        }
        '*' { respond manageVehicleInstance, [status: CREATED] }
    }
}

建议我解决一些问题。

1 个答案:

答案 0 :(得分:2)

我猜Grails无法在重定向中处理复合id。 我有两个选择来解决这个问题

  1. 通过从映射中删除id行来为您的域类创建ID字段
  2. 为您保存的对象实现自定义重定向 redirect(action:'show', params:[truckKey:manageVehicleInstance.truckKey,siteID:manageVehicleInstance.siteID])
  3. 使用2.选项,您可能还需要使用复合ID(例如def manageVehicleInstance = ManageVehicle.findByTruckKeyAndSiteID(params.truckKey, params.siteID))将自定义对象加载到“show”操作中。