我正在尝试使用angularjs和springmvc构建一个应用程序。我有两个类省和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();
}
我得到了那个错误:
/ *
没有找到类org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer和
的序列化程序
没有发现创建BeanSerializer的属性(为了避免异常,请禁用
SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS))(通过参考链:
的java.util.ArrayList [0] - &GT; admin.domain.Provincia [ “refComunidad”] - &LT;
admin.domain.Comunidad $$ EnhancerByCGLIB $$ 68ea9e6f [ “hibernateLazyInitializer”])
* /
我已经在github上看到关于jackson模块的hibernate是解决问题的不错选择 问题:https://github.com/FasterXML/jackson-module-hibernate。 我在我的pom.xml
中包含了jackson模块hibernate依赖项 <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/
的说明进行操作但我得到了同样的错误。
有人可以帮我提一个简单的例子吗?
答案 0 :(得分:10)
你可以试试这个。这对我有帮助。
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();
}
答案 1 :(得分: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;
}
}
答案 2 :(得分:0)
我有确切的问题,这是我的解决方案。
public class YourObjectMapper extends ObjectMapper {
@PostConstruct
public void afterPropertiesSet() throws Exception {
getSerializationConfig().set(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);
}
}
p / s:仅对1.9.x org.codehaus.jackson.map.ObjectMapper
有效,而不对2.x Jackson有效。
答案 3 :(得分:0)
我知道有点晚了,但这是您问题的解决方案:Avoid Jackson serialization on non fetched lazy objects