我在ManyToMany关系中有两个实体。 “用户”和“汽车”。
我有一个所有用户的 p:dataTable ,包括一个包含每个用户二手车的列:
XHTML
<h:form>
<p:dataTable value="#{usersPM.users}" var="user">
<p:column>
<p:inputText value="#{user.name}">
<p:ajax event="blur" listener="#{usersPM.onEdit(user)}"/>
</p:inputText>
</p:column>
<p:column>
<p:selectCheckboxMenu value="#{user.cars}">
<f:selectItems value="#{usersPM.allCars}" />
<p:ajax />
</p:selectCheckboxMenu>
</p:column>
</p:dataTable>
现在,我想使用 p:selectCheckboxMenu 更新用户的汽车列表。 没有保存按钮 - 一切都应该通过ajax处理(对于名称btw工作正常)。
p:selectCheckboxMenu 组件包含所有可用的汽车。除此之外,为每个用户正确选择了当前分配的汽车。
一旦我尝试修改列表,我就收到:
org.hibernate.LazyInitializationException:懒得初始化集合,没有关闭会话或会话
问题出在这里?用户和汽车已加载 - 否则将无法正确显示(?)
以下实体/豆类:
@Entity
public class User{
@ManyToMany
private List<Car> cars;
}
@Entity
public class Car{
@ManyToMany( mappedBy = "cars" )
private List<User> users;
}
@ManagedBean
@ViewScoped
public class UsersPM{
private List<Car> allCars;
private List<User> users;
@PostConsruct
public void init(){
users = userDao.findAllAndLoadCars();
cars = carDao.findAll();
}
}
答案 0 :(得分:4)
要解决此问题,您应该为具有属性name=”collectionType”
的组件提供集合类型。
<p:selectCheckboxMenu value="#{user.cars}">
<f:attribute name="collectionType" value="java.util.ArrayList" />
<f:selectItems value="#{usersPM.allCars}" />
<p:ajax />
</p:selectCheckboxMenu>
阅读更多: