Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 与少年警讯会面_Java_Hibernate_Session_Jpa - Fatal编程技术网

Java 与少年警讯会面

Java 与少年警讯会面,java,hibernate,session,jpa,Java,Hibernate,Session,Jpa,当我在rich:dataTable中加载延迟加载列表时,总是会出现“未能延迟初始化角色集合”错误 这当然是因为会话在此状态下关闭 我的问题是,仅使用JPA(无spring等)如何使用会话。我真的需要HibernateUtil还是Hibernate.Initialize(..)。我宁愿不使用这个Hibernate特定的东西,只使用普通的JPA。也没有急切的收获 我当前的代码: 实体: @SuppressWarnings("serial") @Entity @Table(name = "user",

当我在rich:dataTable中加载延迟加载列表时,总是会出现“未能延迟初始化角色集合”错误

这当然是因为会话在此状态下关闭

我的问题是,仅使用JPA(无spring等)如何使用会话。我真的需要HibernateUtil还是Hibernate.Initialize(..)。我宁愿不使用这个Hibernate特定的东西,只使用普通的JPA。也没有急切的收获

我当前的代码:

实体:

@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(...);
    }
}