gpt4 book ai didi

grails - 继承的 grails 域类缺少动态属性

转载 作者:行者123 更新时间:2023-12-02 08:35:20 27 4
gpt4 key购买 nike

我遇到一个问题,即使用继承时相关表 id 字段从我的域对象返回“null”。这是一个例子:

在/src/groovy/

BaseClass1.groovy

class BaseClass1 {
Long id
static mapping = {
tablePerConcreteClass true
}
}

BaseClass2.groovy

class BaseClass2 extends BaseClass1 {
String someOtherProperty
static constraints = {
someOtherProperty(maxSize:200)
}
static mapping = BaseClass1.mapping
}

在/grails-app/domain 中

ParentClass.groovy

class ParentClass extends BaseClass2 {
ChildClass myChild

static mapping = BaseClass2.mapping << {
version false
}
}

ChildClass.groovy

class ChildClass extends BaseClass1 {
String property

static mapping = BaseClass1.mapping
}

问题出现在这里:

SomeotherCode.groovy

print parentClassInstance.myChild.id // returns the value
print parentClassInstance.myChildId // returns null

有什么想法可能会导致这些动态属性像这样被破坏吗?

最佳答案

调试 get(AssociationName)Id 源后,我发现了以下内容:处理程序是:

GrailsDomainConfigurationUtil.getAssociationIdentifier(Object target, String propertyName,
GrailsDomainClass referencedDomainClass) {

String getterName = GrailsClassUtils.getGetterName(propertyName);

try {
Method m = target.getClass().getMethod(getterName, EMPTY_CLASS_ARRAY);
Object value = m.invoke(target);
if (value != null && referencedDomainClass != null) {
String identifierGetter = GrailsClassUtils.getGetterName(referencedDomainClass.getIdentifier().getName());
m = value.getClass().getDeclaredMethod(identifierGetter, EMPTY_CLASS_ARRAY);
return (Serializable)m.invoke(value);
}
}
catch (NoSuchMethodException e) {
// ignore
}
catch (IllegalAccessException e) {
// ignore
}
catch (InvocationTargetException e) {
// ignore
}
return null;
}

它在相关类 (value.getClass().getDeclaredMethod) 上抛出异常,表示方法 getId() 为 NoSuchMethod。我无法从基类中删除 id 声明,而 Grails 不会提示需要标识符列。我尝试将 id 标记为公开,但它也提示它不存在。所以,我尝试了这个

BaseClass {
Long id
public Long getId() { return this.@id }
}

在某些类上效果很好,但在其他类上却不起作用。

当我删除 ID 声明时,出现错误:“未找到身份属性,但域类中需要该属性”。一时兴起,我尝试将 @Entity 添加到具体类和中提琴中!一切开始工作。

class BaseClass {
//Don't declare id!
}

@Entity
class ParentClass {}

@Entity
class ChildClass {}

我仍然认为这是一个需要添加的 grails bug,但至少它很容易解决。

关于grails - 继承的 grails 域类缺少动态属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23964702/

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