I am working on SpringMVC
, Hibernate
& JSON
but I am getting this error.
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) )
Please check my Entity below
@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; } }
How can I Solve this?
I had a similar problem with lazy loading via the hibernate proxy object. Got around it by annotating the class having lazy loaded private properties with:
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
I assume you can add the properties on your proxy object that breaks the JSON serialization to that annotation.
The problem is that entities are loaded lazily and serialization happens before they get loaded fully.
Hibernate.initialize(<your getter method>);
Just to add this in, I ran into this same issue, but the supplied answers did not work. I fixed it by taking the exception's suggestion and adding to the application.properties file...
spring.jackson.serialization.fail-on-empty-beans=false
I'm using Spring Boot v1.3 with Hibernate 4.3
It now serializes the entire object and nested objects.
EDIT: 2018
Since this still gets comments I'll clarify here. This absolutely only hides the error. The performance implications are there. At the time, I needed something to deliver and work on it later (which I did via not using spring anymore). So yes, listen to someone else if you really want to solve the issue. If you just want it gone for now go ahead and use this answer. It's a terrible idea, but heck, might work for you. For the record, never had a crash or issue again after this. But it is probably the source of what ended up being a SQL performance nightmare.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With