1

誰かが私の状況を手伝ってくれませんか。次のコードがあります。

class Employee {

    Integer empId
    String firstName
    String lastName

    static constraints = {
        empId()
        firstName()
        lastName()
    }

    static mapping = {
        id generator:'assigned', name:'empId'
        version false
    }
}

このコードでは、「作成」によって従業員を保存できますが、次のエラー メッセージが表示されます。

「IDがnullの従業員が見つかりません」およびリストにも、すべての従業員がリストされていますが、従業員IDをクリックすると同じエラーが発生します。助けてください。これは私を夢中にさせています。

ロッキー


お返事をありがとうございます。前述のように、データベースに empId を保存できますが、それでもそのメッセージを取得し、割り当てられた ID (empId) のリストを確認できます。リンクは、最後に数字のない従業員/ショーを指しています。ただし、employee/show/22(empId) は正常に動作します。employee/edit/22 も機能しますが、更新は機能しません。

割り当てられたシーケンスを使用していません。ランダムな整数だけです。empId の代わりに SSN を使用する方が良い例かもしれません。

もう一度ありがとう。


あなたは素晴らしいヘルプバディです。あなたの時間と忍耐に感謝します。私は特別な更新や保存を書いているわけではありません (私は新しすぎて深く掘り下げることができません)。grails を使用してすべてを生成するだけです。しかし、私は回避策を見つけました。ドメイン クラスを変更して変数 id (Long) を追加し、empId 値を id に割り当てる empId セッター メソッドを追加しました。それでできました。これが私のコードです。

class Employee { Long id Long empId 文字列 firstName 文字列 lastName

static constraints = {
    empId()
    firstName()
    lastName()
}

static mapping = {
    id generator:'assigned', name:'empId', column: 'emp_id'
    version false
}

public void setEmpId(Long empId){
    this.empId = empId
    this.id = empId
}

}

より良い方法がありましたら、お気軽にご提案ください。

よろしく

ロッキー

4

1 に答える 1

0

「割り当てられた」シーケンスを使用している場合は、保存する前にオブジェクト ID を自分で割り当てる必要があります。そうしないと、オブジェクトは null または「デフォルト 0」の ID で保存されます。GORM で ID を割り当てたい場合は、「シーケンス」ジェネレーターなど、別のタイプのジェネレーターを使用する必要があります。次のようになります。

id name: 'customId', generator: 'sequence', params: [sequence:'some_sequence']

ID ジェネレーターの詳細については、こちらをご覧ください。

于 2012-08-01T03:42:00.153 に答える