Spring MVC 3.1.2 と Jackson 2 を使用しているというエラーに夢中になっています。
次のモデル クラスがあります。
@Entity
@Table(name = "USER")
@JsonIgnoreProperties(ignoreUnknown=true)
public class User implements Serializable
{
@Id
@SequenceGenerator(name = "USER_ID", sequenceName = "USER_ID_SEQ", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "USER_ID")
private Long id;
@Column(length = 50, nullable = false)
private String firstName;
@Column(length = 50, nullable = false)
private String lastName;
@ManyToMany
@JoinTable(name = "FRIENDS",
joinColumns = @JoinColumn(name = "personId"),
inverseJoinColumns = @JoinColumn(name = "friendId")
)
@JsonManagedReference
private List<User> friends;
@ManyToMany
@JoinTable(name="FRIENDS",
joinColumns=@JoinColumn(name="friendId"),
inverseJoinColumns=@JoinColumn(name="personId")
)
@JsonIgnore
private List<User> friendOf;
// Other attributes and methods...
}
User の単一インスタンスを取得すると、Jackson によって正しくシリアル化されます。しかし、友人を含む User のインスタンスを取得しようとすると、次の例外がスローされます。
org.hibernate.LazyInitializationException: ロールのコレクションの遅延初期化に失敗しました: com.frooid.model.User.friends、セッションまたはセッションが閉じられませんでした
単一の HQL を使用してこのインスタンスを取得しています。
select u from User u left join fetch u.friends f where u.id = :id
みんなに感謝!