当有一对多,多对一等关联关系时,用Hibernate查询并以Jackson转成Json


比如持久化类User

public class User implements java.io.Serializable{
    private string id;
    private Set<Usertorole> usertoroles=new HashSet<Usertorole>(0);
    //getter setter...
}


其Hibernate配置文件User.hbm.xml

<id name="id" type="java.lang.String">
    <column name="ID" length="10"/>
    <generator class="assigned"></generator>
</id>
<set name="usertoroles" table="USERTOROLE" inverse="true" lazy="false" fetch="select">
    <key>
        <column name="ID"/>
    </key>
    <one-to-many class="com.xxx.entity.Usertorole"/>
</set>


以及持久化类Usertorole

public class Usertorole implements java.io.Serializable{
    private string id;
    private User user;
    //getter setter...
}


由User.hbm.xml可知,User类通过一对多与Usertorole类关联,而为了能取到Usertorole集合的值,还设置了

lazy="false"

运行时报错,死循环,等待很长时间才溢出停掉。


这时Jackson的注解就要发挥作用了。


在Usertorole类的User属性之上加上注解@JsonBackReference

public class Usertorole implements java.io.Serializable{
    private string id;
    @JsonBackReference
    private User user;
    //getter setter...
}

再运行就OK了。这是为了防止这种无限循环。