请问关于hql语句的问题:带子查询,谢谢
5iasp 博客专家认证 2007-01-18 02:21:40 请问关于hql语句的问题:
我有个应用如下:
我想列出符合条件的jxs表中的记录如下sql语句
select id,jxsmc from jxs where id not in (select jxsid from product_jxs where productid=2 )
那hql应该如何写?
数据库结构如下:
包括三个表:
产品表: product
经销商表:jxs
产品经销商表:product_jxs
product 表结构
id:产品编号 主键
cpmc:产品名称
jxs 表结构
id 经销商编号 主键
jxsmc 经销商名称
product_jxs 表结构
id: 主键
jxsid:经销商编号 fk 与jxs表通过id关联
productid:产品编号 fk 与product表通过id关联
对应的持久化类如下:
/*
* 创建日期 2007-1-8
*
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
package com.jrsj.bean;
import java.util.HashSet;
import java.util.Set;
public class Product
{
private String id = "";
private String cpmc="";
private Set productjxss=new HashSet();
/**
* @return 返回 productjxss。
*/
public Set getProductjxss() {
return productjxss;
}
/**
* @param productjxss 要设置的 productjxss。
*/
public void setProductjxss(Set productjxss) {
this.productjxss = productjxss;
}
public String getId() {
return id;
}
/**
* @param id 要设置的 id。
*/
public void setId(String id) {
this.id = id;
}
/**
* @return 返回 cpmc。
*/
public String getCpmc() {
return cpmc;
}
/**
* @param cpmc 要设置的 cpmc。
*/
public void setCpmc(String cpmc) {
this.cpmc = cpmc;
}
}
/*
* 创建日期 2007-1-12
*
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
package com.jrsj.bean;
import java.util.HashSet;
import java.util.Set;
/**
* @author Administrator
*
* TODO 要更改此生成的类型注释的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
public class Jxs
{
private String id=null;
private String jxsmc=null;
private Set productjxss=new HashSet();
/**
* @return 返回 productjxs。
*/
public Set getProductjxss() {
return productjxss;
}
/**
* @param productjxs 要设置的 productjxs。
*/
public void setProductjxss(Set productjxss) {
this.productjxss = productjxss;
}
/**
* @return 返回 id。
*/
public String getId() {
return id;
}
/**
* @param id 要设置的 id。
*/
public void setId(String id) {
this.id = id;
}
/**
* @return 返回 jxsmc。
*/
public String getJxsmc() {
return jxsmc;
}
/**
* @param jxsmc 要设置的 jxsmc。
*/
public void setJxsmc(String jxsmc) {
this.jxsmc = jxsmc;
}
}
package com.jrsj.bean;
public class Product_JXS
{
private String id;
private Jxs jxs;
private Product product;
/**
* @return 返回 id。
*/
public String getId() {
return id;
}
/**
* @param id 要设置的 id。
*/
public void setId(String id) {
this.id = id;
}
/**
* @return 返回 jxs。
*/
public Jxs getJxs() {
return jxs;
}
/**
* @param jxs 要设置的 jxs。
*/
public void setJxs(Jxs jxs) {
this.jxs = jxs;
}
/**
* @return 返回 product。
*/
public Product getProduct() {
return product;
}
/**
* @param product 要设置的 product。
*/
public void setProduct(Product product) {
this.product = product;
}
}
映射文件:
1.Product.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<class name="com.jrsj.bean.Product" table="PRODUCT">
<id name="id" type="string" length="50">
<column name="ID" sql-type="varchar2(50)"/>
<generator class="uuid.hex"/><!--主键由应用逻辑产生 assigned要小写//-->
</id>
<property name="cpmc" type="string">
<column name="cpmc" sql-type="varchar2(50)" />
</property>
<set name="productjxss">
<key column="productid" /><!--通过product表的外键productid相关联//-->
<one-to-many class="com.jrsj.bean.Product_JXS"/>
</set>
</class>
</hibernate-mapping>
2. jxs.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<class name="com.jrsj.bean.Jxs" table="JXS">
<id name="id" type="string" length="50">
<column name="ID" sql-type="varchar2(50)"/>
<generator class="uuid.hex"/><!--主键由应用逻辑产生 assigned要小写//-->
</id>
<property name="jxsmc" type="string">
<column name="jxsmc" sql-type="varchar2(50)" />
</property>
<set name="productjxss">
<key column="jxsid" /><!--通过product_jxs表的外键jxsid相关联//-->
<one-to-many class="com.jrsj.bean.Product_JXS"/>
</set>
</class>
</hibernate-mapping>
3. product_jxs.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<class name="com.jrsj.bean.Product_JXS" table="PRODUCT_JXS">
<id name="id" type="string" length="50">
<column name="ID" sql-type="varchar2(50)"/>
<generator class="uuid.hex"/><!--主键由应用逻辑产生 assigned要小写//-->
</id>
<many-to-one name="product" class="com.jrsj.bean.Product" cascade="none" outer-join="auto" column="productid" />
<many-to-one name="jxs" class="com.jrsj.bean.Jxs" cascade="none" outer-join="auto" column="jxsid" />
</class>
</hibernate-mapping>