日期:2014-05-19  浏览次数:20569 次

高分求HQL join fetch思路..
Java code

    //数据库是mysql,现在这个hql不能跑。
     select distinct rl from SysRole rl left outer join fetch rl.rights where rl.roleId=1
       
       //这是关联字段
    SysRole
    private Long roleId;
    private String roleName;
    private String roleDesc;
    private Integer roleFlag;
    private Set users = new HashSet(0);
    private List rights = new ArrayList(0);
       //这是关联字段
    SysRight
    private String rightCode;
    private String rightParentCode;
    private String rightType;
    private String rightText;
    private String rightUrl;
    private String rightTip;
    private String isSelected = "";
    private Set roles = new HashSet(0);


  问题: 弱弱的问一句各位大大,这句hql是什么意思呀。可以改成通俗点的自然语句么?能不能多打几个字说的详细点,举例子就好了。谢谢大家了...对了。我的原数据库是sqlServer2005,现在是mysql5 ,这个应该没关系吧?

------解决方案--------------------
HQl是hibernate中的一种检索方式。
有HQL,QBC,QBE以及本地的sql检索。
从sqlServer2005,改成现在的mysql5没有问题。
------解决方案--------------------
抓取策略(fetching strategy) 是指:当应用程序需要在(Hibernate实体对象图的)关联关系间进行导航的时候, Hibernate如何获取关联对象的策略。抓取策略可以在O/R映射的元数据中声明,也可以在特定的HQL 或条件查询(Criteria Query)中重载声明。 

连接抓取(Join fetching) - Hibernate通过 在SELECT语句使用OUTER JOIN(外连接)来 获得对象的关联实例或者关联集合。 

hql支持left outer join和fetch啊
------解决方案--------------------
hql 是hibernate自己的查询语言,,他是对sql语言的封装版本,,hibernate是可以结合各种数据库去用的,而每个数据库都有自己一些独特的函数功能,就同一功能其底层的实现方法也是不一样的。所以
hibernate就是提供了一套对客户的透明的解决方案,相当于一个adapater,我们写一条语句,无论在哪个数据库上都能实现其功能。
从sqlServer2005,现在是mysql5 有两个地方是需要改动的,,数据库的方言,,和驱动程序的路径,,
<property name="dialect">org.hibernate.dialect.DB2Dialect</property>
------解决方案--------------------