grails domainではbeforeinsertが無効です
1697 ワード
今日grailsプロジェクトを新規作成しましたが、保存を実行するときはいつもエラーが発生します.
なぜかbeforinsertはなかなか作動せず、
その後saveを実行する前にcreateTimeとupdateTimeに値を割り当て、保存できます.
データベースの問題ではなく、設定の問題であることがわかりました.
configを表示する.groovyなどのプロファイルの後も問題は見つかりませんでした.
後でコードをチェックしました
コンストレイントを追加しました.空でもnullでも、保存に成功したのは時間だけです.
このデザインはちょっと不合理ですね.でも、仕方がありません.デザインはこうです.
この中にも一つの問題が現れている.domainの制約はコードレベルであり、データベースには関係ありません.
すべての制約チェックは、プログラムが実行されたときに完了します.この時間は、データベースを挿入する前に、つまりデータベース制約がまだ機能していません.
これからはdomainの制約とデータの制約の違いに注意しましょう
マークちょっと
===============================================================================
class Manipulator {
String name;
String passwd;
String createTime;
String updateTime;
int isDeleted=0;//0 ,1,
static constraints = {
name unique: true
}
def beforeInsert = {
createTime = utils.DateUtil.getStrDate(null, null);
}
def beforeUpdate = {
updateTime = utils.DateUtil.getStrDate(null, null);
}
}
なぜかbeforinsertはなかなか作動せず、
その後saveを実行する前にcreateTimeとupdateTimeに値を割り当て、保存できます.
データベースの問題ではなく、設定の問題であることがわかりました.
configを表示する.groovyなどのプロファイルの後も問題は見つかりませんでした.
後でコードをチェックしました
class Manipulator {
String name;
String passwd;
String createTime;
String updateTime;
int isDeleted=0;//0 ,1,
static constraints = {
name unique: true
createTime blank:true ,nullable:true;
updateTime blank:true ,nullable:true;
}
def beforeInsert = {
createTime = utils.DateUtil.getStrDate(null, null);
}
def beforeUpdate = {
updateTime = utils.DateUtil.getStrDate(null, null);
}
}
コンストレイントを追加しました.空でもnullでも、保存に成功したのは時間だけです.
このデザインはちょっと不合理ですね.でも、仕方がありません.デザインはこうです.
この中にも一つの問題が現れている.domainの制約はコードレベルであり、データベースには関係ありません.
すべての制約チェックは、プログラムが実行されたときに完了します.この時間は、データベースを挿入する前に、つまりデータベース制約がまだ機能していません.
これからはdomainの制約とデータの制約の違いに注意しましょう
マークちょっと
===============================================================================