预先抓取,外连接,和直接查询三者直接的区别:
[1]. 预先抓取和外连接的字段上必须设置好映射关系。
[2]. 预先抓取和立即检索的效果一致,即直接的“from 类”语句,只不过预先抓取可以减少SQL语句的条数。
[3]. 预先抓取的关键字是join fetch,而外连接的关键字只有join。
[4]. 预先抓取将初始化代理对象的引用,把对象的数据填充完毕,即:list的时候返回的是对象的类;但是外连接仅把对象组装好,而不会初始化对象之间的引用关系,即:list的时候返回的是Object数组对象,Object[0]是该类,Object[1]是关联类的内容。
[5]. HQL直接查询(from 类)将忽略配置文件的预先抓取策略。
------------------------------------------------------------------
问:
我是这么认为的,第一种不说了,第二种可以适合这种场景:有2个项目,分别对应一个数据库中的2个用户,A项目要用到B项目中的一个表,该表在B项目中有对应的entity,这时,在A项目中可以用SQL查询B项目中的表,然后.addEntity(Cats.class)
这样的话,可以不要需要A项目中的表与B中的表同步,这么理解,对不对?
[1]. 预先抓取和外连接的字段上必须设置好映射关系。
[2]. 预先抓取和立即检索的效果一致,即直接的“from 类”语句,只不过预先抓取可以减少SQL语句的条数。
[3]. 预先抓取的关键字是join fetch,而外连接的关键字只有join。
[4]. 预先抓取将初始化代理对象的引用,把对象的数据填充完毕,即:list的时候返回的是对象的类;但是外连接仅把对象组装好,而不会初始化对象之间的引用关系,即:list的时候返回的是Object数组对象,Object[0]是该类,Object[1]是关联类的内容。
[5]. HQL直接查询(from 类)将忽略配置文件的预先抓取策略。
------------------------------------------------------------------
问:
sess.createQuery("from Cats").list
与
sess.createSQLQuery("from Cats").addEntity(Cats.class)
2个有什么区别,哪种好些?
我是这么认为的,第一种不说了,第二种可以适合这种场景:有2个项目,分别对应一个数据库中的2个用户,A项目要用到B项目中的一个表,该表在B项目中有对应的entity,这时,在A项目中可以用SQL查询B项目中的表,然后.addEntity(Cats.class)
这样的话,可以不要需要A项目中的表与B中的表同步,这么理解,对不对?