當有一對多,多對一等關聯關係時,用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了。這是爲了防止這種無限循環。