欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

hibernate Hibernate情感SQLCC++ 

程序员文章站 2022-07-14 17:37:16
...
hibernate的多表查询是十分稀罕的东西。

比如2个表关联 NewsClass 跟 News


//查找名字为 “天气预报” 的新闻的栏目
String hql="from Newsclass c where n.news.name="天气预报"";
Query query=session.createQuery(hql);
List list=query.list();


今天看见几个帖子上却是这种写法,很是奇怪。
可以直接用对象查,干吗还要join来join去的,跟sql不是一样了吗?

//查找名字为 “天气预报” 的新闻的栏目
String hql="from Newsclass c join c.news n  where n.name="天气预报"";
Query query=session.createQuery(hql);
List list=query.list();


查了好久才知道2.x不支持对象的方式来查询,就算两个表之间存在一定的关联关系也一定要用join来连接的。
可能我摸hibernate的时候已经是3.x了,一直习惯自己那样写。



在我寻找答案的时候,还意外发现点东西,也顺手写下来好了。


一个栏目包含多个子栏目的结构



配置
<hibernate-mapping>
    <class name="org.lch.webshop.model.Newsclass" table="newsclass">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="native"></generator>
        </id>
        <many-to-one name="newsclass" class="org.lch.webshop.model.Newsclass" fetch="select">
            <column name="ParentID" />
        </many-to-one>
        <property name="classname" type="java.lang.String">
            <column name="cLassname" length="20" />
        </property>
        <set name="newsclasses" inverse="true" lazy="false">
            <key>
                <column name="ParentID" />
            </key>
            <one-to-many class="org.lch.webshop.model.Newsclass" />
        </set>
    </class>
</hibernate-mapping>
 





我想查询 情感天空 这个栏目的父栏目

如下
    	String hql="from Newsclass n where n.newsclasses.classname='情感天空'" order by desc";
    	Query query=session.createQuery(hql);
    	List list=query.list();


hibernate给我返回了几句sql

Hibernate: select newsclass0_.id as id, newsclass0_.ParentID as ParentID0_, newsclass0_.cLassname as cLassname0_ from newsclass newsclass0_, newsclass newsclasse1_ where newsclass0_.id=newsclasse1_.ParentID and newsclasse1_.name='情感天空'



这些sql写得真是漂亮,越来越想了解他怎么生成了hibernate
            
    
    
        Hibernate情感SQLCC++