2013-05-30 29 views
7

Tôi đang cố gắng xây dựng một ứng dụng với angularjs và springmvc.I có hai lớp tỉnh và Comunidad. :Làm thế nào để tuần tự hóa các thực thể được nạp lười biếng với mô-đun jackson hibernate?

@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 
............... 
} 

Trong điều khiển của tôi:

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

Và tôi nhận được rằng lỗi: /* Không serializer tìm thấy cho lớp org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer và
không có tài sản được phát hiện để tạo BeanSerializer (để tránh ngoại lệ, hãy vô hiệu hóa
SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS)) (thông qua chuỗi tham chiếu: java.util.ArrayList [0] -> admin.domain.Provincia ["refC omunidad "] - < admin.domain.Comunidad $$ $$ EnhancerByCGLIB 68ea9e6f [" hibernateLazyInitializer "]) */

Tôi đã đọc trên github về jackson mô-đun ngủ đông là một lựa chọn tốt để giải quyết vấn đề
: https://github.com/FasterXML/jackson-module-hibernate. tôi bao gồm các phụ thuộc mô-đun ngủ đông jackson trong pom.xml của tôi

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

Nhưng tôi không biết được nơi cấu hình "Hibernate4Module.Feature.FORCE_LAZY_LOADING, true". Tôi cố gắng làm theo các chỉ dẫn từ trang đó http://blog.pastelstudios.com/2012/03/12/spring-3-1-hibernate-4-jackson-module-hibernate/

nhưng tôi gặp lỗi tương tự.

Có ai đó có thể giúp tôi bằng một ví dụ dễ dàng không?

Trả lời

10

Bạn có thể thử điều này. Nó giúp tôi.

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(); 
} 
0

Tôi có vấn đề chính xác và đây là giải pháp của tôi.

public class YourObjectMapper extends ObjectMapper { 

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

p/s: Chỉ hợp lệ cho 1.9.x org.codehaus.jackson.map.ObjectMapper và không phải là 2.x Jackson.

+2

Đối Jackson 2.x, sử dụng 'ObjectMapper MAPPER = new ObjectMapper();' 'MAPPER.configure (SerializationFeature.FAIL_ON_EMPTY_BEANS, false);' Điều đó nói rằng, cả hai câu trả lời này dường như không giúp được vấn đề tương tự của tôi. – Marcus

3

Đây là cách tôi đã nhận nó làm việc, tôi đang sử dụng RestEASY trên JBoss WildFly

@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; 
    } 
} 
+0

Phiên bản nào? –

+0

Tôi nên đề cập ... Quá lâu trước đây để hồi tưởng lại. Đó có lẽ là các phiên bản gần đây khi tôi bắt đầu sử dụng chúng, đầu năm 2015 – RoyB

+0

aight, tôi không chắc chắn nhưng tôi không nghĩ rằng điều này làm việc trong nhà cung cấp Jackson 2.x và RESTEasy Jackson 2 3.x. Tôi cần một người khác để kiểm tra nó là tốt. –

Các vấn đề liên quan