我有三个实现复合模式的类,Item,Cluster和Element.
class Item extends Locatable {
...
}
class Cluster extends Item {
static hasMany = [items:Item]
...
}
class Element extends Item {
...
}
Run Code Online (Sandbox Code Playgroud)
我的域模型比这更复杂,但它只是一个例子.当我有一个Item实例时,我想知道它是一个簇还是一个元素,ins.getClass().getSimpleName()我得到一个奇怪的类名:Item_$$_javassist_165如果我这样做,println ins.toString()我会打印出正确的类名(toString方法返回this.getClass().getSimpleName()).
如何获得正确的班级名称?这个"Item_$$_javassist_165"班级名字是什么?
这个
"Item_$$_javassist_165"班级名字是什么?
这意味着你拥有的对象是一个Hibernate延迟加载代理.第一次尝试访问除该对象的id之外的任何内容时,Hibernate将转到数据库并加载实际数据,然后将任何将来的方法调用委托给真实对象.
ins instanceof Cluster当您有一个扩展另一个域类的域类时,明显的方法可能无法在代理存在的情况下正常工作,但GORM提供了一个注入的instanceOf方法,它可以执行您需要的操作并正确处理代理.
if(ins.instanceOf(Cluster)) { .... }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
485 次 |
| 最近记录: |