gpt4 book ai didi

mongodb - 对嵌入式子类的约束-Grails,GORM,Mongo

转载 作者:行者123 更新时间:2023-12-02 14:42:36 25 4
gpt4 key购买 nike

我已经花了几天的时间来解决这个问题。

我有一个带有几个指定约束的嵌入式子类。我的问题是这些约束从未得到执行,
我正在使用grails 2.3.11和mongodb插件3.0.2。

这是我的设置(略有简化)。

媒体课

class Media{
ObjectId id;
String name;
Film film;

static mapWith = "mongo"
static embedded = ["film"]
}

电影课
class Film{
ObjectId id;
String name;

static mapWith = "mongo"
static belongsTo = [media : Media]
static mapping = {
lazy:false
}
static constraints = {
name(nullable:false) //works as expected. Save fails if name is set to null
}
}

Action 电影类
class ActionFilm extends Film{
int score;
String director;

//These constraints are never enforeced. No matter what value I set the fields to the save is always successful
static constraints = {
score(min:50)
director(nullable:true)
}
}

这是Mongo和Gorm的问题吗?在父级和子类中是否可能有约束?

保存时的示例代码
public boolean saveMedia(){
ActionFilm film = new ActionFilm()
film.setName("TRON");
film.setScore(2)
film.setDirector("Ted")

Media media = new Media()
media.setName("myMedia")
media.setFilm(film)
media.save(flush:true, failOnError:false) //Saves successfully when it shouldn't as the score is below the minimum constrains

}

编辑
我已经玩了很多次,并且仅在将MediaFilm对象与ActionFilm作为嵌入式对象保存时,这个问题才出现。如果我保存ActionFilm对象,则将应用验证。
 ActionFilm film = new ActionFilm()
film.setName("TRON");
film.setScore(2)
film.setDirector("Ted")
film.save(flush:true, failOnError:false) //Doesn't save as the diameter is wrong. Expected behaviour.

因此,当我保存ActionFilm对象时,约束将按预期方式应用,但如果它是嵌入式对象,则不应用约束。

最佳答案

万一其他人遇到这个问题,我已经解决了我的问题。它可能不是最佳解决方案,但我还没有找到其他选择。

我已经向Media类添加了一个自定义验证器,该验证器在嵌入式Film类上调用validate(),并添加了由Media对象错误引起的所有错误

class Media{
ObjectId id;
String name;
Film film;

static mapWith = "mongo"
static embedded = ["film"]

static constraints = {
film(validator : {Film film, def obj, def errors ->
boolean valid = film.validate()
if(!valid){
film.errors.allErrors.each {FieldError error ->
final String field = "film"
final String code = "$error.code"
errors.rejectValue(field,code,error.arguments,error.defaultMessage )
}
}
return valid
}
)
}

关于mongodb - 对嵌入式子类的约束-Grails,GORM,Mongo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26994126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com