首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Hibernate 5.2.11中使用HBMXML中的缓存usage=“只读”/>时获取NPE

在Hibernate 5.2.11中,如果使用HBMXML中的缓存配置中的usage="只读",却出现了NullPointerException(NPE)的情况。

首先,让我们解释一下Hibernate、HBMXML以及缓存的概念。

Hibernate是一个Java持久化框架,用于将Java对象映射到关系数据库中的表结构。它简化了数据库操作的过程,提供了面向对象的方式进行数据库操作。

HBMXML(Hibernate Mapping XML)是Hibernate中用于配置映射关系的XML文件。它定义了Java对象与数据库表之间的映射关系,包括表名、列名、主键、关联关系等。

缓存是一种用于临时存储数据的技术,可以提高数据访问的性能。在Hibernate中,可以使用二级缓存(Second-Level Cache)来缓存对象,减少数据库查询的次数,提升应用程序的性能。

回到问题本身,当在HBMXML中配置缓存的usage属性为"只读"时,如果出现NullPointerException,可能有以下几个原因:

  1. 缓存配置错误:检查HBMXML文件中缓存配置的语法是否正确。确保usage属性的取值为"只读",没有拼写错误或其他语法问题。
  2. 缓存配置与环境不兼容:某些情况下,特定的缓存配置可能与当前环境不兼容,导致NullPointerException。尝试更换其他可用的缓存配置,或查阅Hibernate文档以确认该配置在当前版本中是否被支持。
  3. Hibernate版本不兼容:某些Hibernate版本可能存在Bug,导致在特定情况下使用特定缓存配置时出现NullPointerException。建议升级Hibernate版本到最新稳定版,以获取更好的兼容性和Bug修复。

根据具体的问题原因,可以采取相应的解决方法。请注意,对于更复杂的问题,可能需要查阅Hibernate的官方文档、社区论坛或向Hibernate开发者寻求帮助。

推荐的腾讯云相关产品:在腾讯云的云计算服务中,可以使用云数据库CynosDB作为Hibernate应用程序的数据库存储后端,通过配置相应的缓存策略来提升应用程序的性能。您可以在腾讯云官方网站的云数据库CynosDB产品页面(https://cloud.tencent.com/product/cynosdb)了解更多信息。

相关搜索:尝试获取jar中的资源时使用NPE在JUnit Jupiter中使用自定义组合批注时,获取@Autowired的NPE在hibernate 5中使用sum函数时的NullPointerException如何使用Caffeine缓存管理器测试内存缓存?(例如,在缓存后获取缓存中的条目数,缓存驱逐)尝试使用python paho MQTT在IoTDB数据库中插入数据时的NPE在AEM 6.5和Java 11上打开页面属性时使用日志中的NPE发出警告在Vue + .Net核心应用程序中使用导入组件时,获取"TypeError:"_Ctor“是只读的”TornadoFX中的列表视图在使用缓存表单时显示重复的项目使用Hibernate应用程序在Java中更改PostgreSQL的MySql时出现错误在SpringBoot应用程序中从缓存中获取时使用@AutoValue注释反序列化类在react中获取按钮的值时使用Hot尝试在Spring中保存具有联接列的实体时,在hibernate中获取非空约束冲突无法在带有Spring的Hibernate5中使用SessionFactory.getCurrentSession()获取会话使用Apache Camel和Hibernate时的多租户支持(在Spring应用程序中)在使用file()函数时防止wordpress中的服务器端缓存在使用timeout命令时,如何获取文件中的日志?在MicronautProject中,使用hibernate规范引发异常:无法获取当前线程的事务同步会话在使用Hibernate和JPA的Postgresql数据库中插入链接实体时引发的SqlExceptionHelper在Microsoft.AspNetCore.Mvc中:防止_context在初始化模型时使用缓存的结果JavaScript:在使用引用的函数时,在even处理程序中获取$(这)
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Hibernate缓存配置

,filter,iterate时,如session缓存中还不存在相应的对象,Hibernate会把该对象加入到一级缓存中, 当Session关闭的时候该Session所管理的一级缓存也会立即被清除...、Hibernate在默认情况下并不会对所有实体对象进行缓,所以,我们需要指定缓存哪些对象, 在实体对象的映射文件中(相应的标签内部),添加如下配置: usage...另外还有如下注意事项:   1、查询缓存需要在Query的相应方法执行前加上这么一句:   query.setCacheable(true);   在使用Hibernate时,获得的query有setCacheable...方法,可以设置使用缓存,但当使用JPA时,javax.persistence.Query并没有setCacheable方法,此时如果JPA的实现是Hibernate时,可以将其进行如下转化,再调用setCacheable...只读 缓存(read only) 如果你的应用程序只需读取一个持久化类的实例,而无需对其修改, 那么就可以对其进行只读 缓存。这是最简单,也是实用性最好的方法。甚至在集群中,它也能完美地运作。

1.6K10
  • Hibernate之一级缓存和二级缓存

    1:Hibernate的一级缓存:   1.1:使用一级缓存的目的是为了减少对数据库的访问次数,从而提升hibernate的执行效率;(当执行一次查询操作的时候,执行第二次查询操作,先检查缓存中是否有数据...,如果有数据就不查询数据库,直接从缓存中获取数据);   1.2:Hibernate中的一级缓存,也叫做session的缓存,它可以在session范围内减少数据库的访问次数,只在session...维护的,用户不能操作缓存内容;如果想操作缓存内容,必须通过hibernate提供的evict/clear方法操作   1.6:缓存相关的方法(在什么情况下使用上面方法呢?...);       方式四(推荐):在使用数据之后再关闭session;  3:二级缓存: Hibernate提供的缓存 有一级缓存、二级缓存。..."/>    3.4:缓存策略: usage="read-only"/> 放入二级缓存的对象,只读; usage="nonstrict-read-write

    95170

    Hibernate【缓存】知识要点

    这里写图片描述 因此,在获取数据的时候还是使用list()方便! 懒加载 懒加载就是当使用数据的时候才去获取数据、执行对应的SQL语句…当还没用到数据的时候,就不加载对应的数据!...usage="read-only" class="zhongfucheng.aa.Cat"/> ---- 测试: 我们知道一级缓存是Session的缓存,那么我们在测试二级缓存的时候使用两个...这里写图片描述 ---- 缓存策略 我们在把Animal类放进二级缓存的时候,用法为只读 ?...这里写图片描述 ---- usage的属性有4种: ** 放入二级缓存的对象,只读; ** 非严格的读写 读写; 放入二级缓存的对象可以读、写; (基于事务的策略) ---- 集合缓存 如果我们在数据库查询的数据是集合...…Hibernate默认是没有为集合数据设置二级缓存的…因此还是需要去读写数据库的信息 接下来,我们就看看把集合设置为二级缓存是什么做的: 在hibernate.cgf.xml中配置对象中的集合为二级缓存

    74350

    hibernate二级缓存作用、配置

    在集群环境中,缓存被一个机器或多个机器的进程共享,缓存中的数据被复制到集群环境中的每个进程节点,进程间通过远程通信来保证缓存中的数据的一致,缓存中的数据通常采用对象的松散数据形式....所以说,二级缓存的作用范围是针对根据ID获得对象的查询。 ● 在执行各种条件查询时,如果所获得的结果集为实体对象的集合,那么就会把所有的数据对象根据ID放入到二级缓存中。...在这里特别要注意的是对放入缓存中的数据不能有第三方的应用对数据进行更改(其中也包括在自己程序中使用其他方式进行数据的修改,例如,JDBC),因为那样Hibernate将不会知道数据已经被修改,也就无法保证缓存中的数据与数据库中数据的一致性...常见的缓存组件 在默认情况下,Hibernate会使用EHCache作为二级缓存组件。...hibernate的二级缓存限制还是比较多的,不方便用jdbc可能会大大的降低更新性能。在不了解原理的情况下乱用,可能会有1+N的问题。不当的使用还可能导致读出脏数据。

    1K20

    Hibernate二级缓存问题

    get方法获取数据时还是会再次去查询数据库的)。... 4、配置哪些数据使用二级缓存,不配置的话二级缓存不会缓存任何数据(在hibernate.cfg.xml文件里和映射文件里配置2选1,需要注意的是这些配置必须配置在映射文件的后面...集合区的数据存放原理结论: 由图可知,实体类中的集合属性的数据在存储时分为两部分,集合中每个对象的oid存储在集合缓存区,每个对象的具体的属性值数据存储在类级别的缓存区,当需要用的时候根据oid再次从类级别的缓存区中获取数据进行封装..., 如果启用了查询缓存, 当第一次执行查询语句时, Hibernate 会把查询结果存放在查询缓存中....以后再次执行该查询语句时, 只需从缓存中获得查询结果, 从而提高查询性能 查询缓存使用于如下场合: 1.> 应用程序运行时经常使用查询语句 2.> 很少对与查询语句检索到的数据进行插入, 删除和更新操作

    69220

    系统学习javaweb-10-Hibernate的配置与api操作

    在保存部门的时候,同时保存员工, 数据会保存,但关联关系不会维护,即外键字段为NULL 2. 获取数据 无影响 3....清空一级缓存中缓存的所有对象 【使用案例】 批量操作使用使用: Session.flush(); // 先与数据库同步 Session.clear(); // 再清空一级缓存内容 5.2 二级缓存...)指定类加入二级缓存 (4)测试二级缓存 【缓存策略】 usage="read-only"/> 放入二级缓存的对象,只读; usage...在真正使用数据的时候才向数据库发送查询的sql;调用集合的size()/isEmpty()方法,只是统计,不真正查询数据 【解决session关闭后使用懒加载数据报错】 // 方式1: 先使用一下数据...; // 方式4: 在使用数据之后,再关闭session 7 hibernate对连接池的支持 Hibernate 自带一个连接池(只有一个连接),且支持C3P0连接池 【Hbm对C3P0连接池支持的核心类

    94520

    Hibernate二级缓存的使用「建议收藏」

    通常在 Hibernate 的初始化阶段, Hibernate 会把映射元数据和预定义的 SQL 语句放到 SessionFactory 的缓存中, 映射元数据是映射文件中数据的复制,而预定义 SQL...语句时 Hibernate 根据映射元数据推到出来的....该内置缓存是只读的. 外置:需要去配置第三方缓存插件(hibernate内部没有二级缓存实现),在默认情况下, SessionFactory不会启用这个缓存插件....对于二级缓存来说存储的是对象的属性散装数据(存在其类级别缓冲区中)。当要获取二级缓存中的数 据的时候,他会根据这些数据(id、name)重新组装成为一个对象(customer)。...中usage="read-write" class="cn.itcast.query.Order"/> 注释掉,会产生额外10条SQL,原因是order的类级别缓存区缓存不了数据了

    1.3K10

    Hibernate二级缓存提升性能(注解方式)

    合理的缓存应用可以极大地提高系统性能,最简单的是在应用层面做缓存(越高层面做缓存,效果往往越好),直接将数据缓存到服务器中,以全局map方式存储。...在使用的时候直接从缓存的map中取,而不用连接数据库,从而提升性能。这种方式简单易行,但是map常驻服务器内存,并且在数据变更(增删改)的时候要手动更新map。...不锁定缓存中的数据 read-only (只读型) 适用从来不会被修改的数据(如参考数据) 在此模式下,如果对数据进行更新操作,会有异常 事务隔离级别低,并发性能高 在集群环境中也能完美运作 @Entity...查询缓存适用于以下场合: (1)在应用程序运行时经常使用的查询语句(参数相同) (2)很少对与查询语句检索到的数据进行插入、删除或更新操作 6、不使用缓存、使用hibernate...实验结果很明显,应用缓存的效果明显好于前两者,但是应用缓存在第一次的时候耗时较长,因为要做初始化操作。在更新数据时,要更新缓存,也会存在一定耗时,所以看到应用缓存的第一个点很高。

    70420

    加速你的Hibernate引擎(下)

    4.7抓取策略调优 抓取策略决定了在应用程序需要访问关联对象时,Hibernate以何种方式以及何时获取关联对象。HRD中的第20章“改善性能”对该主题作了很好的阐述,我们在此将关注它的使用方法。...你也许会去使用HQL中的DISTINCT关键字或Cirteria中的distinct功能或是Java的Set接口来消除重复数据。但所有这些都是在Hibernate(在持久层)中实现的,而非数据库中。...在业务分析和设计过程中,你应该将不同数据获取或修改分组放到不同的领域对象实体中,而不是使用这种抓取策略。 如果不能重新设计遗留表,可以使用HQL或Criteria提供的投影功能来获取数据。...相对快速网络,在慢速网络中这一点更为重要。Oracle建议的经验值是10。你应该基于自己的环境进行测试。 在使用上述任一方法时都要关闭缓存,因为批量加载一般是一次性任务。...使用hilo优化器时,你的序列不能再被其他应用程序使用,除非它们使用与Hibernate相同的逻辑。使用pooled优化器,在其他应用程序使用同一序列时则相当安全。

    97130

    hibernate二级缓存策略

    ehcache,在2.1中就是 hibernate.cache.provider_class=net.sf.hibernate.cache.EhCacheProvider 如果使用查询缓存,加上...timeToIdleSeconds是发呆时间,是可选的。当往缓存里面put的元素超过500个时,如果overflowToDisk=”true”,就会把缓存中的部分数据保存在硬盘上的临时文件里面。...相同条件第一次list的时候,因为查询缓存中找不到,不管class缓存是否存在数据,总是发送一条sql语句到数据库获取全部数据,然后填充查询缓存和class缓存。...但是第二次执行的时候,问题就来了,如果你的class缓存的超时时间比较短,现在class缓存都超时了,但是查询缓存还在,那么list方法在获取id串以后,将会一个一个去数据库load!...在hibernate2.1的ehcache实现中,如果锁住部分缓存的事务发生了异常,那么缓存会一直被锁住,直到60秒后超时。 不严格读写缓存不锁定缓存中的数据。

    44710

    Hibernate二级缓存(二)

    缓存策略:Hibernate提供了多种缓存策略可用于控制二级缓存的行为和缓存数据的更新。以下是一些常用的缓存策略:Read-Only(只读):对于只读数据,可以使用该策略。...它假定数据在整个应用程序的生命周期内都是不可变的,并且不会被修改。这样可以提供最佳的性能,因为不需要处理缓存的更新和失效。Read-Write(读写):对于经常被读取和修改的数据,可以使用该策略。...它会在数据被修改时更新缓存,并且在需要时将修改后的数据刷新到数据库中。这样可以提供一定程度的数据一致性,但也会带来一些额外的开销。...Nonstrict-Read-Write(非严格读写):该策略在数据更新时不会立即更新缓存,而是在缓存失效或下一次读取时才更新。这样可以提供更好的性能,但会带来一定的数据不一致性风险。...您可以使用sessionFactory.getCache()方法获取缓存管理器的引用,以便在运行时管理缓存,如清空缓存、查看缓存统计信息等。

    26140

    Hibernate的缓存机制如何应用?

    当session对象调用get()或load()方法从数据库取出一个对象后,该对象也会被放入到session的缓存中。 使用HQL和QBC等从数据库中查询数据。...其原理是:第一次调用get()方法, Hibernate先检索缓存中是否有该查找对象,发现没有,Hibernate发送SELECT语句到数据库中取出相应的对象,然后将该对象放入缓存中,以便下次使用,第二次调用...get()方法,Hibernate先检索缓存中是否有该查找对象,发现正好有该查找对象,就从缓存中取出来,不再去数据库中检索。...-- 默认设置 maxElementsInMemory : 在內存中最大緩存的对象数量。 eternal : 缓存的对象是否永远不变。..."read-write"/> hibernate-mapping> 若存在一对多的关系,想要在在获取一方的时候将关联的多方缓存起来,需要在集合属性下添加

    45220

    Hibernate二级缓存(一)

    在多个会话之间共享数据,并减少与数据库的交互次数,从而降低系统的负载。缓存级别Hibernate提供了两种类型的二级缓存:实体缓存和集合缓存。...缓存实现策略Hibernate的二级缓存可以使用多种实现策略,包括使用内存、使用第三方缓存提供程序(如Ehcache、Infinispan等)或自定义实现。...">false在上面的示例中,我们配置了使用Ehcache作为二级缓存的提供程序,并启用了二级缓存。...实体缓存的使用要使用实体缓存,您可以在实体类上使用@Cacheable注解,或者在Hibernate映射文件中配置usage="read-write"/>。...集合缓存的使用要使用集合缓存,您可以在关联的集合属性上使用@Cache注解,或者在Hibernate映射文件中配置usage="read-write"/>。

    33220
    领券