当有一对多,多对一等关联关系时,用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了。这是为了防止这种无限循环。
时间: 2024-10-10 17:07:49