【问题标题】:Hibernate - Query returns null for all fields in entity while the same query returns perfectly from dbHibernate - 查询为实体中的所有字段返回 null,而相同的查询从 db 完美返回
【发布时间】:2015-04-13 04:11:00
【问题描述】:

Hibernate - 查询为实体中的所有字段返回 null

Long fooId = 39;    
Query query = getCurrentSession().createQuery("from FooEntity where deleted IS FALSE AND id=:fooId" );
query.setParameter( "fooId", fooId );
FooEntity fooEntity = ( FooEntity ) query.uniqueResult();

检查 FooEntity 会显示以下结果

(id=null, name=null, deleted=null)

虽然相同的查询从 db 返回完美的结果

select * from foo where deleted IS FALSE AND id=39
(id, name, deleted) => (39, 'Bar', false)

It has to be noted that this occurs in random cases only. Most of the time hibernate returns perfect result.

【问题讨论】:

    标签: java hibernate postgresql spring-mvc


    【解决方案1】:

    请尝试logsysout下一行的值。

    对我和OP 来说,问题是一样的,只是 Java 调试器没有显示值。价值一直存在。

    【讨论】:

    • 有什么办法可以解决这个问题吗?是调试器的错误还是与Hibernate 相关的错误?
    • 我不知道。这个问题不是很一致。自从问题发生以来,我已经多次调试相同的代码,但它再也没有发生过。我建议您终止 IDE 和相关的 JVM 线程,然后重试,因为对我来说,这是多个调试会话之间唯一发生的变化。如果您发现这个问题在 JVM 进程中以某种方式一致,也请发表评论。
    【解决方案2】:

    可能是并发问题(当我们有相同的行为时,我们注意到线程之间存在共享会话)

    线程之间的共享实体或会话或会话之间的共享实体可能会导致此类问题

    【讨论】:

    • @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) 这个注解对Entity有影响吗?
    • 这意味着你也使用二级缓存,对吧?什么样的缓存?是的,READ_WRITE 是最安全的,但它只是并发策略,如果使用二级缓存,您还必须考虑事务策略,如果它是分布式缓存和事务隔离,例如您刚刚创建了该项目,此时无法从另一个项目中看到它,等等......有很多地方可能会出错,您只指定了一条信息
    猜你喜欢
    • 2016-05-22
    • 2021-06-26
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 1970-01-01
    相关资源
    最近更新 更多