相关疑难解决方法(0)

Transaction-scoped Persistence上下文和Extended Persistence上下文之间有什么区别?

Transaction-scoped Persistence上下文和Extended Persistence上下文之间有什么区别?

java jpa

41
推荐指数
3
解决办法
3万
查看次数

未能懒惰地初始化角色集合,..无法初始化代理 - 没有会话 - JPA + SPRING

我在Spring(3.2.2)中使用JPA(使用Hibernate 4.3.3作为持久性提供程序),我的所有字段都正常加载,但是当我尝试访问我的Collection时,它会抛出错误 -

Exception in thread "main" org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.br.common.catalog.entity.Category.allParentCategoryXrefs, could not initialize proxy - no Session
    at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:572)
    at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:212)
    at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:551)
    at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:140)
    at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:526)
    at java.lang.String.valueOf(String.java:2827)
    at java.io.PrintStream.println(PrintStream.java:771)
    at test.Test.main(Test.java:30)
Run Code Online (Sandbox Code Playgroud)

当我调试这个时,我的实体类中定义的每个集合都出错了 - com.sun.jdi.InvocationException occurred invoking method.

我尝试使用collection.size()和Hibernate.initialize(),但没有一个工作.在网上搜索我发现延长Persitence将解决问题,即.

 @PersistenceContext(type=PersistenceContextType.EXTENDED)

        protected EntityManager em;
Run Code Online (Sandbox Code Playgroud)

这工作得很好,但通过这个我发现他们将永远保持打开,现在春天不会处理这个.有没有办法用Spring解决这个问题.任何帮助都非常感谢.

我的实体是 -

  @Entity
    @Inheritance(strategy = InheritanceType.JOINED)
    @Table(name="CATEGORY")
    public class Category implements Serializable {
       @Id
        @GeneratedValue(generator= "CategoryId")
         @Column(name = "CATEGORY_ID")
        protected Long id;

        @ManyToOne(targetEntity = Category.class)
        @JoinColumn(name = "DEFAULT_PARENT_CATEGORY_ID") …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate jpa spring-mvc

16
推荐指数
2
解决办法
6万
查看次数

当数据正确显示时,为什么我在Spring MVC Web应用程序中获得Hibernate LazyInitializationException?

我正在尝试使用Spring MVC创建一个Web应用程序,将Hibernate作为其ORM层.但是,由于我对这两个框架缺乏经验,我正在努力.

以下代码将正确显示我正在查找的所有记录,但仍将堆栈跟踪放入我的日志中.我无法找到有关集成Hibernate和SpringMVC的详细文档(我查看了springsource.org并阅读了关于interweb的各种文章).谁能指出我在这里做错了什么?

请注意,我花了一些时间试图在互联网上找到答案,包括查看这个问题.遗憾的是没有帮助.

我还应该注意,此应用程序的ORM部分已在独立的Java应用程序中使用和测试,没有任何问题.所以我认为Spring MVC和Hibernate的集成导致了这个问题.

这是具有着名的延迟初始化问题的堆栈跟踪(截断);

2009-03-10 12:14:50,353 [http-8084-6] ERROR org.hibernate.LazyInitializationException.<init>(LazyInitializationException.java:19) - could not initialize proxy - no Session
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
    at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:57)
    at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:111)
    at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:150)
    at com.generic.orm.generated.SearchRule$$EnhancerByCGLIB$$92abaed6.toString(<generated>)
    at java.lang.String.valueOf(String.java:2827)
    at java.lang.StringBuffer.append(StringBuffer.java:219)
    at org.apache.commons.lang.builder.ToStringStyle.appendDetail(ToStringStyle.java:578)
    at org.apache.commons.lang.builder.ToStringStyle.appendInternal(ToStringStyle.java:542)
    at org.apache.commons.lang.builder.ToStringStyle.append(ToStringStyle.java:428)
    at org.apache.commons.lang.builder.ToStringBuilder.append(ToStringBuilder.java:840)
    at org.apache.commons.lang.builder.ReflectionToStringBuilder.appendFieldsIn(ReflectionToStringBuilder.java:606)
.....
Run Code Online (Sandbox Code Playgroud)

这是我的网页控制器的代码;

private List<Report> getReports() {
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    session.beginTransaction();

    List<Report> reports = session.createCriteria(Report.class).list();
    Hibernate.initialize(reports);

    session.getTransaction().commit();
    return reports;
}
Run Code Online (Sandbox Code Playgroud)

使用此显示html在网页上使用哪个;

<table border="1">
    <c:forEach items="${model.reports}" var="report">
        <tr>
            <td><c:out …
Run Code Online (Sandbox Code Playgroud)

java spring netbeans hibernate web-applications

11
推荐指数
2
解决办法
5万
查看次数

无法初始化代理 - 再次没有会话

我在查看页面时收到这些错误日志

ERROR [TP-Processor11] (LazyInitializationException.java:42) - could not initialize proxy - no Session
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
    at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:132)
    at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:174)
    at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:190)
    at org.osmoz.contents.model.enm.ContentType_$$_javassist_71.getDefaultShortMode(ContentType_$$_javassist_71.java)
    at org.osmoz.contents.web.tapestry.components.EnmContentZone.getTemplate(EnmContentZone.java:67)
    at org.osmoz.contents.web.tapestry.base.AbstractRawContentZone.getContent(AbstractRawContentZone.java:67)
    at $PropertyConduit_1276091af82.get($PropertyConduit_1276091af82.java)
    at org.apache.tapestry5.internal.bindings.PropBinding.get(PropBinding.java:58)
    at org.apache.tapestry5.internal.structure.InternalComponentResourcesImpl$1.read(InternalComponentResourcesImpl.java:510)
    at org.apache.tapestry5.internal.structure.InternalComponentResourcesImpl$1.read(InternalComponentResourcesImpl.java:496)
    at org.apache.tapestry5.corelib.components.OutputRaw._$read_parameter_value(OutputRaw.java)
    at org.apache.tapestry5.corelib.components.OutputRaw.beginRender(OutputRaw.java:43)
    at org.apache.tapestry5.corelib.components.OutputRaw.beginRender(OutputRaw.java)
    at

我知道问题是Session已经关闭了.但我真的不知道为什么这个错误不会经常发生,为什么我不知道根本原因.

环境:

Tapestry5,JPA,Hibernate 3.3.2.GA

我已经定了

<filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
Run Code Online (Sandbox Code Playgroud)

在web.xml中也是

hibernate lazy-initialization

7
推荐指数
1
解决办法
4万
查看次数

是否可以在没有对象到对象映射的情况下强制执行外键?

假设提供了以下映射:

<class name="A" table="a_table">
  <id name="id"/>
  <many-to-one name="entityB" column="fk_B" not-null="false" unique="true"/>
</class>

<class name="B" table="b_table">
  <id name="id"/>
</class>
Run Code Online (Sandbox Code Playgroud)

Java类:

public class A {
   private long id;
   private B entityB;
   // getters and setters skipped
}
Run Code Online (Sandbox Code Playgroud)

是否可以更改Hibernate映射,以便Hibernate在启动时仍然强制执行和创建外键,但类A看起来如下所示:

public class A {
   private long id;
   private long idOfB;
   // getters and setters skipped
}
Run Code Online (Sandbox Code Playgroud)

我明白,如果我转换<many-to-one...成一个<property...可以工作,但数据库不会强制执行外键.

我需要这样做,因为对象B可能(或可能不)单独初始化,这有时会导致 org.hibernate.LazyInitializationException: could not initialize proxy - no Sessiona.getB()调用时发生异常.我宁愿把它作为一个long idOfB并在必要时加载整个对象; 这也可以A …

java hibernate foreign-keys hibernate-mapping

6
推荐指数
1
解决办法
3446
查看次数

克服Hibernate中的延迟加载问题,多对多关系

自学Hibernate,我有以下表结构/关系

关系

这由以下类别代表......

用户

@Entity
@Table(name = "users")
public class User implements IUser<Role>, Serializable {

    @Id
    @GeneratedValue(strategy = javax.persistence.GenerationType.IDENTITY)
    @SequenceGenerator(name = "user_key_seq")
    @Column(name = "key", insertable = false, updatable = false)
    private Long key;

    @Column(name = "name")
    private String name;

    @ManyToMany(cascade = {CascadeType.ALL})
    @JoinTable(name = "userroles",
                    joinColumns = {
                        @JoinColumn(name = "userkey")},
                    inverseJoinColumns = {
                        @JoinColumn(name = "rolekey")})
    private Set<Role> roles = new HashSet<>(5);

    @Override
    public Set<Role> getRoles() {
        return roles;
    }

    // Other setters and getters

}
Run Code Online (Sandbox Code Playgroud)

角色

@Entity
@Table(name …
Run Code Online (Sandbox Code Playgroud)

java hibernate

6
推荐指数
1
解决办法
5456
查看次数