我怎样才能从PersistentSet中获取可能为空的元素类型

时间:2012-12-20 19:45:27

标签: java grails groovy

嗯,这个问题解释了,这就是我试图做到的。我认为问题可能是Set为空,并且这些方法至少需要一个元素来返回类。

视图/产品/ _form.gsp

<% cl = UnidadProductiva.get(params.unidadProductiva?.id).producto %>
<p>${cl}</p>

返回[]

如果我在producto之后添加此方法/属性:

.getCandidateClass():没有方法签名:
org.hibernate.collection.PersistentSet.getCandidateClass()适用于参数类型:()值:[]

.class:
class org.hibernate.collection.PersistentSet

.getElementType():没有方法签名:
org.hibernate.collection.PersistentSet.getElementType()适用于参数类型:()values:[]可能的解决方案:getElement(java.lang.Object)

.properties:

{
    clearQueueEnabled=true,
    session=SessionImpl(PersistenceContext[
        entityKeys=[
            EntityKey[
                planificador.UnidadProductiva#1
            ]
        ],
        collectionKeys=[
            CollectionKey[
                unidadesProductivas.Cocimiento.producto#1
            ],
            CollectionKey[
                planificador.UnidadProductiva.grupoRecursos#1
            ],
            CollectionKey[
                planificador.UnidadProductiva.lineaProduccion#1
            ]
        ]
    ];ActionQueue[
        insertions=[

        ]updates=[

        ]deletions=[

        ]collectionCreations=[

        ]collectionRemovals=[

        ]collectionUpdates=[

        ]
    ]),
    unreferenced=false,
    role=unidadesProductivas.Cocimiento.producto,
    directlyAccessible=false,
    empty=true,
    storedSnapshot={

    },
    operationQueueEnabled=false,
    value=[

    ],
    owner=unidadesProductivas.Cocimiento: 1,
    cachedSize=-1,
    class=classorg.hibernate.collection.PersistentSet,
    rowUpdatePossible=false,
    snapshot={

    },
    key=1,
    putQueueEnabled=false,
    dirty=false
}

我期待一种方法或属性返回 CaldoMadre

这是我正在使用的课程

class UnidadProductiva {...}

class Cocimiento extends UnidadProductiva {
    static hasMany = [producto:CaldoMadre];
}

class Producto {
    static belongsTo = [unidadProductiva:UnidadProductiva]
}

class CaldoMadre extends Producto {...}

我是graile的智利菜鸟,如果我不理解,请耐心等待。

1 个答案:

答案 0 :(得分:0)

由于Cocimiento中没有声明的字段UnidadProductiva,因此我可以使用producto而不是UnidadProductiva。在gsp中使用它有点尴尬,但也许你可以在控制器中执行它并将其传递出去:

//in controller
import java.lang.reflect.*

//in show action or whichever makes sense
Field field = Cocimiento.class.getDeclaredField("producto");
ParameterizedType pt = (ParameterizedType) field.getGenericType();
Type concreteType = pt.getActualTypeArguments()[0];
println concreteType.getName()

将使用我的软件包设置打印出com.CaldoMadre

并不依赖于Set

中的任何内容