Spring MVC自定义Class属性编辑器

时间:2012-03-09 17:09:52

标签: java spring hibernate spring-mvc

此代码有什么问题?

我以这种方式绑定了一个“Fornitore fornitore”属性:

@InitBinder
    protected void initBinder(WebDataBinder binder) {       

        binder.registerCustomEditor(Fornitore.class, new PropertyEditorSupport() {          
            @Override
            public void setAsText(String fornitoreId) throws IllegalArgumentException {
                logger.info("FORNITORE:: setValue");
                setValue((Fornitore) fornitoreService.getFornitore(fornitoreId));
            }
            @Override
            public String getAsText() {
                logger.info("FORNITORE:: getValue");
                if (getValue() == null) {
                    return "";
                } else {
                    return ((Fornitore) getValue()).getRagioneSociale();
                }               
            }           
        });
    }

结束于:

Caused by: org.hibernate.LazyInitializationException: could not initialize proxy - no Session
    at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:86)
    at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:140)
    at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:190)
    at it.trew.prove.model.beans.Fornitore_$$_javassist_0.getRagioneSociale(Fornitore_$$_javassist_0.java)
    at it.trew.prove.web.controllers.ScadenziarioController$1.getAsText(ScadenziarioController.java:56)

2 个答案:

答案 0 :(得分:1)

我不确定上面的Spring DataBinder和下面的Hibernate Session错误之间是否存在任何关系。我发现数据绑定器没有明显错误,但它与启动hibernate会话没有任何关系。

答案 1 :(得分:0)

这个问题看起来很古老,但我整天都在讨厌,希望我的解决方案可以帮助别人。

似乎方法

fornitoreService.getFornitore(fornitoreId) 

返回代理对象而不是真实对象。我不知道存储库是如何实现的,但我猜测服务下面的底层存储库方法是返回一个代理对象,而不是真正的代理对象。

就我而言(Spring Data),解决方案是将底层存储库方法从JpaRepository getOne更改为CrudRepository findOne方法。