我正在处理SpringMVC,Hibernate&,JSON但出现此错误。
SpringMVC
Hibernate
JSON
HTTP Status 500 - Could not write JSON: No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationConfig.SerializationFeature.FAIL_ON_EMPTY_BEANS) )
请在下面检查我的实体
@Entity @Table(name="USERS") public class User { @Id @GeneratedValue @Column(name="USER_ID") private Integer userId; @Column(name="USER_FIRST_NAME") private String firstName; @Column(name="USER_LAST_NAME") private String lastName; @Column(name="USER_MIDDLE_NAME") private String middleName; @Column(name="USER_EMAIL_ID") private String emailId; @Column(name="USER_PHONE_NO") private Integer phoneNo; @Column(name="USER_PASSWORD") private String password; @Column(name="USER_CONF_PASSWORD") private String confPassword; @Transient private String token; @Column(name="USER_CREATED_ON") private Date createdOn; @OneToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL) @Fetch(value = FetchMode.SUBSELECT) @JoinTable(name = "USER_ROLES", joinColumns = { @JoinColumn(name = "USER_ID") }, inverseJoinColumns = { @JoinColumn(name = "ROLE_ID") }) private List<ActifioRoles> userRole = new ArrayList<ActifioRoles>(); @OneToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL,mappedBy="userDetails") @Fetch(value = FetchMode.SUBSELECT) private List<com.actifio.domain.Address> userAddress = new ArrayList<com.actifio.domain.Address>(); @OneToOne(cascade=CascadeType.ALL) private Tenant tenantDetails; public Integer getUserId() { return userId; } public void setUserId(Integer userId) { this.userId = userId; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getEmailId() { return emailId; } public void setEmailId(String emailId) { this.emailId = emailId; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getConfPassword() { return confPassword; } public void setConfPassword(String confPassword) { this.confPassword = confPassword; } public Date getCreatedOn() { return createdOn; } public void setCreatedOn(Date createdOn) { this.createdOn = createdOn; } public List<ActifioRoles> getUserRole() { return userRole; } public void setUserRole(List<ActifioRoles> userRole) { this.userRole = userRole; } public String getMiddleName() { return middleName; } public void setMiddleName(String middleName) { this.middleName = middleName; } public Integer getPhoneNo() { return phoneNo; } public void setPhoneNo(Integer phoneNo) { this.phoneNo = phoneNo; } public List<com.actifio.domain.Address> getUserAddress() { return userAddress; } public void setUserAddress(List<com.actifio.domain.Address> userAddress) { this.userAddress = userAddress; } public Tenant getTenantDetails() { return tenantDetails; } public void setTenantDetails(Tenant tenantDetails) { this.tenantDetails = tenantDetails; } public String getToken() { return token; } public void setToken(String token) { this.token = token; } }
我该如何解决?
通过hibernate代理对象进行延迟加载时,我遇到了类似的问题。通过用以下方式注释具有延迟加载的私有属性的类来解决此问题:
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
我假设您可以在代理对象上添加打破JSON序列化到该批注的属性。
问题在于实体是延迟加载的,序列化是在实体完全加载之前发生的。
Hibernate.initialize(<your getter method>);