get
比createQuery
有什么优势?hibernate createQuery vs
我可以看到有可能在没有解析HQL轻微的性能改进,但没有任何其他主要的优势,使用克服的createQuery?
get
比createQuery
有什么优势?hibernate createQuery vs
我可以看到有可能在没有解析HQL轻微的性能改进,但没有任何其他主要的优势,使用克服的createQuery?
首先,这是更快输入,是更可读,并明确表达了意图:通过ID得到的实体。基本上不可能发生错误,而在HQL查询中可能会出现拼写错误。
关于性能,主要优点是只有当实体不在会话缓存中时才执行select语句。每次都会执行HQL查询。如果你有二级缓存,如果实体已经在第二级缓存中,get()
将避免完全执行查询。
get()
直接使用会话来检索对象。
createQuery()
使用HQL
所以,根据这个,你对'get'的表现不正确:http://stackoverflow.com/questions/5370482/whats-the-advantage-of-load-vs-get-在冬眠。看起来你实际上是在谈论“负载”的表现。 – 2013-03-15 06:59:11
没有。 'get()'看看实体是否在会话缓存中。如果已经存在,则返回。否则,它会执行一个SQL查询来加载它,将它放入会话缓存中,并将其返回。 'load()'检查实体是否在会话缓存中。如果已经存在,则返回。否则,它创建一个懒惰的代理,甚至不检查对象是否存在于数据库中,并返回此代理。你为什么不自己检查一下?打开SQL日志记录,然后进行试验。 – 2013-03-15 07:02:55
有趣的区别。我在哪里可以阅读更多关于此?我找到'get'信息的地方似乎都提到它“总是碰到数据库”。他们是否都在重复相同的错误信息? – 2013-03-15 07:08:11