当前位置: 首页 > 知识库问答 >
问题:

无法写入内容:无法初始化代理-没有会话

严俊彦
2023-03-14
  //i use ajax, spring mvc , hibernate-jpa

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

Etat HTTP 500-无法写入内容:未能懒洋洋地初始化角色集合:org.service.pf.entities.categorie.souscategorie,无法初始化代理-没有会话(通过引用链:java.util.arraylist[0]->org.service.pf.entities.souscategorie[“categorie”]->org.service.pf.entities.categorie[“souscategorie”]);嵌套异常是com.fasterxml.jackson.databind.jsonMappingException:未能懒洋洋地初始化角色集合:org.service.pf.entities.categorie.souscategorie,无法初始化代理-没有会话(通过引用链:java.util.ArrayList[0]->org.service.pf.entities.souscategorie[“categorie”]->org.service.pf.entities.categorie[“souscategorie”])

//my controller 

     @RequestMapping(value="/filtrecatgajax")
     @ResponseBody 
    public List<Souscategorie> getAllProductByKategori(@RequestParam(value = "id", required = true) String id  ){

    return metiersr.SouscategoriesParCategorie((long) Integer.parseInt(id)); 
}

 //My dao function 

 public class ServicedaoImpl implements Servicedao {
 @PersistenceContext

  @Override
   public List<Souscategorie> SouscategoriesParCategorie(Long idCat) {
    Query query = em
            .createQuery("SELECT p FROM Souscategorie p WHERE   p.categorie.id=:x");
    query.setParameter("x", idCat);
    return query.getResultList();

}
}

//Relation OneToMany

        @OneToMany(mappedBy = "categorie")
        private Collection<Souscategorie> souscategorie;

//Relation ManyToOne

        @ManyToOne
        @JoinColumn(name = "categorie_id")
        private  Categorie categorie;

   Can someone help me !

共有1个答案

经嘉
2023-03-14

您可以在实体列上设置fetchtype.lazy并检索对象,而不提取关联对象。我是这样做的,

我使用的是Spring MVC4,Hibernate 4,Spring Rest

问题陈述

我想从数据库中获取answer_tbl实体对象,但出现异常

无法写入内容:无法初始化代理-没有通过引用链的会话

我的应答实体类

@Entity
@Table(name = "Answer")
public class Answer_tbl implements Serializable {

    @Id
    @Column(name = "AnswerId")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    @JoinColumn(name="QuestionId")
    private Question_tbl question;

    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    @JoinColumn(name="ShaikhId")
    private Shaikh_tbl shaikh; 

    // getters and setters

当我调用服务http://localhost:8080/myapp/rest/answer/2时,得到了与您相同的异常。

问题实际上是fetchtype.lazy。Jackson试图转换Answer_tbl实体,它试图加载相关的对象(Question_tbl和Shaikh_tbl),但hibernate会话关闭。

解决方案

一个解决方案是删除fetch=fetchtype.lazy,然后hibernate会急切地加载关联。但这不是你要找的。

第二个解决方案是使用Jackson JSON处理器,它可以处理延迟加载功能。

<dependency>
  <groupId>com.fasterxml.jackson.datatype</groupId>
  <artifactId>jackson-datatype-hibernate4</artifactId>
  <version>2.5.3</version>
</dependency>  
public class HibernateAwareObjectMapper extends ObjectMapper {

    public HibernateAwareObjectMapper() {
        registerModule(new Hibernate4Module());
    }

}
<mvc:annotation-driven>
    <mvc:message-converters>
        <!-- Use the HibernateAware mapper instead of the default -->
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
            <property name="objectMapper">
                <bean class="path.to.your.HibernateAwareObjectMapper" />
            </property>
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven> 
{
  "id": 2,
  "question": null,
  "shaikh": null,
  "solution": "testing...",
}

下面是Git链接FasterXML-Jackson-Datatype-Hibernate

希望这会有所帮助。

 类似资料:
  • 问题内容: 我有一个看起来像这样的错误: 无法初始化代理-没有会话 我正在使用java,hibernate和spring。尝试生成PDF文档时会出现此错误,我正在按照以下步骤即时生成它并存储在数据库中。 我通过POST方法向应用发送了请求。这将即时生成PDF并显示给用户。 在该请求之后,我发送了另一个请求,但是通过ajax发送了一个请求。这将生成相同的PDF,但会将其保存在数据库中。 该错误表明由

  • 问题内容: 我有2台物理服务器,我的Web应用程序命中该服务器由负载均衡器管理。我总是得到- org.hibernate.LazyInitializationException:无法初始化代理-没有会话 当其中一台服务器受到攻击而另一台服务器运行平稳而没有任何问题时。我有一个由应用程序启用和管理的本地托管缓存存储。仅当尝试从一个表访问一个特定的列时,才会发生此异常。不管选择哪个服务器,其余的操作都

  • 问题内容: 我的代码检索与用户有关的所有信息: 在简单地返回一组用户的ES。 我的问题是:即使会话已经关闭,为什么对象仍然具有其值(例如名称)?是该类的实例变量。但是为什么我不能检索其值却可以检索该类的常规实例变量? 是一个。 问题答案: 有关使用惰性关联的hibernate文档清楚地将这种访问称为错误。只有在会话仍处于打开状态时,才能与延迟关联的对象进行交互。文档的该部分还提供了访问对象的延迟关

  • 问题内容: 对数据库有以下查询: 在获取employee.address.street,employee.address.houseNumber或employee.address.city时,它将失败,但以下情况除外: 员工映射: 地址映射: 对于其他类(办公室,公司等),这​​是绝对正常的。如果注释,则在jsp应用程序中加载地址字段的行将正常工作。怎么了?顺便说一下,尽管有异常,它仍显示有关js

  • 问题内容: 我试图从数据库中的对象进行简单加载,但出现错误“无法初始化代理-没有会话”,知道吗?谢谢 问题答案: 尝试添加到validate方法: 发生的事情是,因为没有注释,所以没有与该方法关联的会话,并且每个查询都将在其自己的会话中运行,该会话随后将立即关闭。 该方法始终返回一个代理,与之不同(请参阅此处,了解load与get之间的差异)。 因此,返回了代理,但是由于缺少代理,因此立即关闭了创

  • 我尝试通过WebService从我的数据库中获取数据列表。我用spring和冬眠我读过这样或这样的主题 所以我试着把一些事务放在类的顶部,在我的方法上,等等,但是不起作用,或者我没有用正确的参数把正确的东西放在正确的地方。 谢谢,如果语法不好,请原谅 编辑:我想问题是来自我的类Personne在懒惰模式下得到了与许多其他实体的链接,这是否意味着在web服务上说,当我返回对象时,我不关心这个链接?或