2012-11-19 37 views
0

期间,我所面临的问题,这是一点点接近this issue,但是当我已经做了所有的步骤,我仍然有这样的例外:杰克逊例外系列化

org.codehaus。 jackson.map.JsonMappingException:未找到 类org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer和 没有属性串行发现创建BeanSerializer(避免异常, 禁用SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS))(通过 参考链: java.util.ArrayList [0] - > com.myPackage.SomeEntity [“mainEntity”] - > com.myPackage.MainEntity [“sub使用实体 “] - > com.myPackage.Subentity1 _ $$ _ javassist_8 [” 处理程序“])

这里是代码我的实体:

@JsonAutoDetect 
public class MainEntity { 

    private Subentity1 subentity1; 

    private Subentity2 subentity2; 

    @JsonProperty 
    public Subentity1 getSubentity1() { 
     return subentity1; 
    } 

    public void setSubentity1(Subentity1 subentity1) { 
     this.subentity1 = subentity1; 
    } 

    @JsonProperty 
    public Subentity2 getSubentity2() { 
     return subentity2; 
    } 

    public void setSubentity2(Subentity2 subentity2) { 
     this.subentity2 = subentity2; 
    } 
} 



@Entity 
@Table(name = "subentity1") 
@JsonAutoDetect 
public class Subentity1 { 

    @Id 
    @Column(name = "subentity1_id") 
    @GeneratedValue 
    private Long id; 

    @Column(name = "name", length = 100) 
    private String name; 

    @JsonIgnore 
    @OneToMany(mappedBy = "subentity1") 
    private List<Subentity2> subentities2; 

    @JsonProperty 
    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    @JsonProperty 
    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
    //here I didin't add @JsonProperty, cause it leads to cycling during serialization 
    public List<Subentity2> getSubentity2s() { 
     return subentity2s; 
    } 

    public void setSubentity2s(List<Subentity2> subentity2s) { 
     this.subentity2s = subentity2s; 
    } 

} 

@Entity 
@Table(name = "subentity2") 
@JsonAutoDetect 
public class Subentity2 { 
    @Id 
    @Column(name = "subentity2_id") 
    @GeneratedValue 
    private Long id; 

    @Column(name = "name", length = 50) 
    private String name; 

    @ManyToOne 
    @JoinColumn(name = "subentity1_id") 
    private Subentity1 subentity1; 

    @JsonProperty 
    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    @JsonProperty 
    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    @JsonProperty 
    public Subentity1 getSubentity1() { 
     return subentity1; 
    } 

    public void setSubentity1(Subentity1 subentity1) { 
     this.subentity1 = subentity1; 
    } 

这里是我的方法的代码转换:

private String toJSON(Object model) { 
     ObjectMapper mapper = new ObjectMapper(); 
     String result = ""; 
     try { 
      result = mapper.writeValueAsString(model); 
     } catch (JsonGenerationException e) { 
      LOG.error(e.getMessage(), e); 
     } catch (JsonMappingException e) { 
      LOG.error(e.getMessage(), e); 
     } catch (IOException e) { 
      LOG.error(e.getMessage(), e); 
     } 
     return result; 
    } 

我会为任何帮助非常感谢,建议或代码:)件

UPD

ALSP,我忘了从我的控制器添加一段代码:

String result = ""; 
     List<SomeEntity> entities = someEntityService.getAll(); 
     Hibernate.initialize(entities); 
     for (SomeEntity someEntity : entities) { 
      Hibernate.initialize(someEntity.mainEntity()); 
      Hibernate.initialize(someEntity.mainEntity().subentity1()); 
      Hibernate.initialize(someEntity.mainEntity().subentity2()); 
     } 
     result = this.toJSON(entities); 

我不能忽视任何领域,因为我需要他们

+0

你在使用Jackson Hibernate模块吗? (https://github.com/FasterXML/jackson-module-hibernate) – StaxMan

+0

nope,因为我使用的是jackson 1.x版本 –

+0

好的。有一个早期版本的模块(与1.9一起工作)(有一个分支,Maven回购1.9.0版本),这是值得的。 – StaxMan

回答

0

我创建了一个Bean与平面字段(字符串,布尔值,双击等),这是在我的课,并进行改造

1

基本上你的一些字段被包装成懒休眠代理。 在序列化对象之前调用Hibernate.initialize(model),它会加载您的懒惰集合和引用。

但我不会混合的数据库和视图模型,这是一个不好的做法。为您的宁静模型创建一组类,并在序列化之前将数据库实体转换为它们。

+0

看到更新的问题 –

+1

你尝试过@JsonIgnoreProperties({“hibernateLazyInitializer”,“处理程序”})从你以前的问题的意见? – hoaz

+0

实际的问题是我需要所有这些字段 –

0

取得方法如果使用的是延迟加载添加此

@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})