这是我卡住的地方:
javax.servlet.ServletException:org.hibernate.LazyInitializationException:未能延迟初始化角色集合:it.trew.model.TipoCaratteristica.traduzioni,没有会话或会话已关闭
我的一些实体代码:
@Entity
@Table(name = "tipi_caratteristiche")
public class TipoCaratteristica implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
private String nome;
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(
name = "tipi_caratteristiche_traduzioni",
joinColumns = { @JoinColumn(name = "tipo_caratteristica_id") },
inverseJoinColumns = { @JoinColumn(name = "traduzione_id") }
)
private List<Traduzione> traduzioni = new ArrayList<Traduzione>();
“Traduzione”是一个简单的普通实体,具有一对字符串属性。
我有一个“编辑”jsf 页面,它通过 id 加载“TipoCaratteristica”并尝试在标签中显示其列表。
我使用 ejb-facade 方法来获取已编辑的对象:
public T find(Object id) {
return getEntityManager().find(entityClass, id);
}
然后,在 jsf 支持 bean 中:
TipoCaratteristica tc = ejbFacade.find(Long.valueOf(value));
我读了一些关于那个例外的东西。实际上,在“traduzioni”集合上设置获取类型 EAGER 可以修复它,但我不想这样做。我读过关于在事务中完成所有操作,或使用 Hibernate.initialize() 但不知道如何做到这一点。
你能帮我吗?