Java 与少年警讯会面
当我在rich:dataTable中加载延迟加载列表时,总是会出现“未能延迟初始化角色集合”错误 这当然是因为会话在此状态下关闭 我的问题是,仅使用JPA(无spring等)如何使用会话。我真的需要HibernateUtil还是Hibernate.Initialize(..)。我宁愿不使用这个Hibernate特定的东西,只使用普通的JPA。也没有急切的收获 我当前的代码: 实体:Java 与少年警讯会面,java,hibernate,session,jpa,Java,Hibernate,Session,Jpa,当我在rich:dataTable中加载延迟加载列表时,总是会出现“未能延迟初始化角色集合”错误 这当然是因为会话在此状态下关闭 我的问题是,仅使用JPA(无spring等)如何使用会话。我真的需要HibernateUtil还是Hibernate.Initialize(..)。我宁愿不使用这个Hibernate特定的东西,只使用普通的JPA。也没有急切的收获 我当前的代码: 实体: @SuppressWarnings("serial") @Entity @Table(name = "user",
@SuppressWarnings("serial")
@Entity
@Table(name = "user", uniqueConstraints = {
@UniqueConstraint(columnNames = "username"),
@UniqueConstraint(columnNames = "email")})
public class User implements Serializable {
...
@OneToMany(mappedBy="user", fetch=FetchType.LAZY)
private List<UserTournament> userTournament = new ArrayList<UserTournament>();
...
}
如果不希望类依赖于Hibernate,请创建一个实用程序类并依赖此实用程序类初始化关联:
public class JPAUtils {
public static void initialize(...) {
Hibernate.initialize(...);
}
}
当您更改JPA提供程序时(几乎没有机会发生),然后使用新JPA提供程序的相应帮助程序类重写此方法,或者只需调用对象或集合的方法进行初始化。如果您不想保持会话打开,则必须加载数据。如果你不想急着去接你,那你就倒霉了……我们开始吧:但是没有办法让JPA的会议继续开着吗?我对JPA这个话题很陌生。到目前为止,我曾经使用过HibernateUtil方法。但我宁愿避免它,只使用带有persctence.xml的JPA,而不使用额外的hibernate.cfg.xml。保持会话打开与JPA是正交的。您可以在web应用程序中使用start JavaEE过滤器轻松实现视图中的开放会话模式。@SotiriosDelimanolis谢谢,我将对此进行检查。
@Named("myTournBean")
@ViewScoped
public class MyTournamentsBean implements Serializable {
@EJB
private UserControllerInterface userController;
private List<UserTournament> tournaments;
...
@PostConstruct
public void init() {
...
tournaments = userController.getUserTournaments(userid);
}
...
}
<h:panelGrid columns="3" columnClasses="titleCell">
<rich:dataScroller for="table" maxPages="5" />
<rich:dataTable value="#{myTournBean.tournaments}" var="tourn"
id="table" rows="10">
<rich:column>
<f:facet name="header">
<h:outputText value="Id" />
</f:facet>
<h:outputText value="#{tourn.id}" />
</rich:column>
</rich:dataTable>
<rich:dataScroller for="table" maxPages="5" />
</h:panelGrid>
@Stateful
@ConversationScoped
public class Service
{
@PersistenceContext(type = PersistenceContextType.EXTENDED)
private EntityManager em;
}
public class JPAUtils {
public static void initialize(...) {
Hibernate.initialize(...);
}
}