8

我正在尝试使用 angularjs 和 springmvc 构建应用程序。我有两个类 Province 和 Comunidad。:

@Entity(name="Provincia")
@Table(name="T_PROVINCIA")
public class Provincia implements Serializable{


private String idProvincia;
private String nombre;    
private Comunidad refComunidad;

public Provincia() {
}

@Id
@TableGenerator(name="provinciaGen",
                table="T_GENERATOR",
                pkColumnName="ID_GENERATOR",
                pkColumnValue="ID_PROVINCIA",
                valueColumnName="ID_VALUE")
@GeneratedValue(generator="provinciaGen",strategy=GenerationType.TABLE)
@Column(name="ID_PROVINCIA")
public String getIdProvincia() {
    return idProvincia;
}

@Column(name="NOMBRE")
public String getNombre() {
    return nombre;
}

@ManyToOne(targetEntity=Comunidad.class, fetch=FetchType.LAZY)
@JoinColumn(name="ID_COMUNIDAD")
public Comunidad getRefComunidad() {
    return refComunidad;
}
setters
.....
.....
}

@Entity(name="Comunidad")
@Table(name="T_COMUNIDAD")
public class Comunidad implements Serializable{

@Id   
@TableGenerator(name="comunidadGen",
                table="T_GENERATOR",
                pkColumnName="ID_GENERATOR",
                pkColumnValue="ID_COMUNIDAD",
                valueColumnName="ID_VALUE")
@GeneratedValue(generator="comunidadGen",strategy=GenerationType.TABLE)
@Column(name="ID_COMUNIDAD")
private String idComunidad;

@Column(name="NOMBRE")
private String nombre;

@Column(name="SHORTNAME")
private String shortName;

public Comunidad() {
}

getters and setters
...............
}

在我的控制器中:

@RequestMapping("/userlist.json")
public @ResponseBody List<Provincia> getUserList(){
    return this.provinciaService.loadAllProvincias();
}

我得到了那个错误:/* No serializer found for class org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer 也
没有发现创建 BeanSerializer 的属性(为了避免异常,禁用
SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS)(通过参考链:java .util.ArrayList[0]->admin.domain.Provincia["refComunidad"]-< admin.domain.Comunidad$$EnhancerByCGLIB$$68ea9e6f["hibernateLazyInitializer"]) */

我在 github 上阅读了关于 jackson module hibernate 是解决
问题的好选择:https ://github.com/FasterXML/jackson-module-hibernate 。我在 pom.xml 中包含了 jackson 模块休眠依赖项

    <dependency>
      <groupId>com.fasterxml.jackson.datatype</groupId>
      <artifactId>jackson-datatype-hibernate4</artifactId>
      <version>2.2.0</version>
</dependency> 

但我不知道在哪里配置“Hibernate4Module.Feature.FORCE_LAZY_LOADING,true”。我尝试按照该页面的指示进行操作http://blog.pastelstudios.com/2012/03/12/spring-3-1-hibernate-4-jackson-module-hibernate/

但我得到同样的错误。

请问有人可以帮我举一个简单的例子吗?

4

4 回答 4

12

你可以试试这个。它对我有帮助。

ObjectMapper mapper = new ObjectMapper();

Hibernate4Module hbm = new Hibernate4Module();
hbm.enable(Hibernate4Module.Feature.FORCE_LAZY_LOADING);

mapper.registerModule(hbm);
ObjectWriter w = mapper.writer();
String result = null;
try {
    result = w.writeValueAsString(o);
} catch (JsonProcessingException e) {
    e.printStackTrace();
}
于 2013-07-10T10:43:41.570 回答
4

这就是我的工作方式,我在 JBoss WildFly 上使用 RestEASY

@Provider
@Produces(MediaType.APPLICATION_JSON)
public class JacksonConfig implements ContextResolver<ObjectMapper> {
    @Override
    public ObjectMapper getContext(Class<?> type) {
        ObjectMapper mapper = new ObjectMapper();
        mapper.registerModule(new Hibernate4Module());
        return mapper;
    }
}
于 2015-03-02T14:42:54.210 回答
0

我有确切的问题,这是我的解决方案。

public class YourObjectMapper extends ObjectMapper {

    @PostConstruct
    public void afterPropertiesSet() throws Exception {
        getSerializationConfig().set(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);
    }
}

p/s:仅对 2.x Jackson 有效,1.9.x org.codehaus.jackson.map.ObjectMapper不适用于 2.x Jackson。

于 2013-09-12T06:53:01.297 回答
0

我知道有点晚了,但这里是您的问题的解决方案:避免杰克逊对非获取的惰性对象进行序列化

于 2014-02-14T08:29:52.820 回答