*
1,hibernate查询语句
涉及到多表关联时,如果不需要修改同步到数据库中,避免查询出持久对象,可提高效率
现在有两条HQL查询语句,分别如下:
from Customer c inner join c.orders o group by c.age;(1)select c.ID,c.name,c.age,o.ID,o.order_number,o.customer_IDfrom Customer c inner join c.orders c group by c.age;(2)这两条语句使用了HQL语句的内连接查询(我们将在HQL语句的连接查询部分专门讨论),现在我们可以看出这两条查询语句最后所返回的结果是一样的,但是它们其实是有明显区别的,语句(1)检索的结果会返回Customer与Order持久化对象,而且它们会被置于Hibernate的Session缓存之中,并且Session会负责它们在缓存中的唯一性以及与后台数据库数据的同步,只有事务提交后它们才会从缓存中被清除;而语句(2)返回的是关系数据而并非是持久化对象,因此它们不会占用Hibernate的Session缓存,只要在检索之后应用程序不在访问它们,它们所占用的内存就有可能被JVM的垃圾回收器回收,而且Hibernate不会同步对它们的修改。参考地址:
2,@within与@target
@within(M)匹配标注了@M注解的类及子孙类
@target(M)匹配任意标注了@M的目标类
注:如果标注了@M的是接口,则接口实现类都不匹配,因为他们是针对目标类,而不是针对运行时的引用类型
*