找不到类org.hibernate.proxy.pojo.javassist.Javassist的序列化程序? [英] No serializer found for class org.hibernate.proxy.pojo.javassist.Javassist?

查看:720
本文介绍了找不到类org.hibernate.proxy.pojo.javassist.Javassist的序列化程序?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在处理 SpringMVC Hibernate & JSON 但我得到这个错误。

  HTTP状态500  - 无法写入JSON:未找到类org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer的序列化程序和没有发现创建BeanSerializer的属性(以避免异常,禁用SerializationConfig.SerializationFeature.FAIL_ON_EMPTY_BEANS))

请检查我的实体在下面

$ $ p $ @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)
私人整数phoneNo;

@Column(name =USER_PASSWORD)
私人字符串密码;

@Column(name =USER_CONF_PASSWORD)
private String confPassword;

@Transient
私有字符串标记;

@Column(name =USER_CREATED_ON)
私人日期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>();

$ b $ @ @ToToMany(fetch = FetchType.EAGER,cascade = CascadeType.ALL,mappedBy =userDetails)
@Fetch(value = FetchMode.SUBSELECT)
私人列表< com.actifio.domain.Address> userAddress = new ArrayList< com.actifio.domain.Address>();

@OneToOne(cascade = CascadeType.ALL)
私人租户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;
}

公共列表< 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;
}

公共列表< com.actifio.domain.Address> getUserAddress(){
返回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(<你的getter方法>); 


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>);

这篇关于找不到类org.hibernate.proxy.pojo.javassist.Javassist的序列化程序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆