many-to-one进行类关联的问题

在使用hibernate进行类关联的时候,通常采用如下的做法:

 

<class
            name="org.appfuse.task.model.Advertisement"
            table="advertisement_t"
    >
...
        <many-to-one
            name="resource"
                    class="org.appfuse.task.model.Resource"
                    column="resource_id"
                cascade="all"
        >

 

但是假设我们Resource对于不同的资源需要进行构造不同的子类,比如ImageResource, TextResource, HtmlResource, etc. 在web进行不同资源展现的时候,就需要针对不同资源进行不同的展现。

此时,如果直接访问某个字类的属性,就会告知没有这个属性。通过在webcontroller跟踪advertisement对象的resource属性可以发现,它不是某个字类的对象,它是Resource$EnhancerbyCglib!通过查询hibernate的文档,原来这是hibernate的many-to-one的配置:

lazy (optional - defaults to proxy): By default, single point associations are proxied. lazy="no-proxy" specifies that the property should be fetched lazily when the instance variable is first accessed (requires build-time bytecode instrumentation). lazy="false" specifies that the association will always be eagerly fetched.

原来默认的情况下使用proxy方式连接,这时候产生的不是实际的类,而是cglib代理类。只有对他的属性进行访问的时候,才会构造真正的实际类。

解决方法很简单,在many-to-one配置中增加lazy=false,就可以在页面中直接访问各子类的特殊属性啦。

 

相关文章:http://www.wangchao.net.cn/bbsdetail_925021.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值