Hibernate之HQL左关联配置

 HibernateHQL左关联配置

一般在单表中查询,hql类似于SQL的写法 不过是把字段变成属性名。当两个表关联查询的时候,一般联合查询也不会有问题。当如果需要左关联的时候,HQL就不能直接实现了,必须要配置主从表的关系才能够成功的实现SQL中的左关联!

 

现在有一个需求:

供应商表Supplier 与报名表ItemEnroll

现在有一个报名的功能,如果需要供应商登陆,我就会在ItemEnroll中用participateId字段 记录供应商的supplierId。如果不需要登陆,就要把participateId字段放空。

 

我现在需要做一个查询页面,查询报名的信息以及供应商的supplierName。这个时候 我需要用一句HQL实现。假设participateId字段为空,全关联ItemEnrollSupplier表的时候,没有供应商信息的报名也不会查询来。

我需要的效果是无论有没有供应商的信息,有一条报名信息 就要查出来一条报名信息。这个时候就需要左关联的写法。需要配置XML的文件。中间经历了一些曲折,最后把配出的结果与几点经验教训贴出来。

1.       当写左关联的时候,需要在配置文件中配置一对多或者多对一的关系。

2.       HQL写左关联的时候,ON条件省略。在配置文件中配置。

3.       分析好是多对一还是一对多的关系。

4.       多对一或者一对多中配置的COLUMN属性都是指子表中记录的那个关联的外键!

 

 

 

关键的几句代码:

<property name="participateId" type="java.lang.Long" column="participate_id" /> <many-to-one name="supplier" class="com.dfe.bcm.po.DfSupplierPO" cascade="none" insert="false" update="false"> <column name="participate_id" ></column> </many-to-one>

----------------------------------

以下为可看可不看的信息。供记忆!

----------------------------------------------------------------------

 

 

 

Hibernate之HQL左关联配置_第1张图片

 

 

Supplier供应商表:

 

Hibernate之HQL左关联配置_第2张图片

 

 

 

 

 

 

 

HQL配置文件与JAVABEAN代码:

 报名:

 

 

 <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" > <hibernate-mapping> <class name="com.dfe.bcm.po.DfItemEnrollPO" table="DF_ITEM_ENROLL" > <id name="itenId" type="java.lang.Long" column="iten_id" > <generator class="native" /> </id> <property name="itemIdentifying" type="java.lang.Long" column="item_Identifying" /> <property name="itemName" type="java.lang.String" column="ITEM_NAME" /> <property name="participateRemark" type="java.lang.String" column="participate_Remark" /> <property name="enrollTime" type="java.sql.Date" column="enroll_Time" /> <property name="enrollRemark" type="java.lang.String" column="enroll_Remark" /> <property name="enrollReturnCode" type="java.lang.String" column="enroll_Return_Code" /> <property name="enrollAuditStatus" type="java.lang.String" column="enroll_Audit_Status" /> <property name="siteId" type="java.lang.String" column="site_id" /> <property name="domainId" type="java.lang.String" column="domain_id" /> <property name="createTime" type="java.sql.Timestamp" column="create_time" /> <property name="creator" type="java.lang.String" column="creator" /> <property name="updateTime" type="java.sql.Timestamp" column="update_time" /> <property name="updator" type="java.lang.String" column="updator" /> <property name="participateId" type="java.lang.Long" column="participate_id" /> <many-to-one name="supplier" class="com.dfe.bcm.po.DfSupplierPO" insert="false" update="false"> <column name="participate_id" ></column> </many-to-one> </class> </hibernate-mapping>

 

 

 

 

 

 

 

 

 

 

 

 

 package com.dfe.bcm.po; import java.util.Date; import java.util.Set; import java.util.HashSet; /** * 项目报名 * @version 1.0 */ public class DfItemEnrollPO { private Long itenId; private Long itemIdentifying; //项目的ID 采购需求/库存分享的ID private String itemName; private Long participateId; //参与者ID 比如供应商的ID或者参与网上竞价的ID private String participateRemark; private Date enrollTime; //报名时间 private String enrollRemark; private String enrollReturnCode; private String enrollAuditStatus; private String siteId; private String domainId; private Date createTime; private String creator; private Date updateTime; private String updator; private DfSupplierPO supplier; public String getEnrollReturnCode() { return enrollReturnCode; } public String getParticipateRemark() { return participateRemark; } public String getEnrollRemark() { return enrollRemark; } public Date getCreateTime() { return createTime; } public String getCreator() { return creator; } public String getUpdator() { return updator; } public String getDomainId() { return domainId; } public Date getEnrollTime() { return enrollTime; } public String getItemName() { return itemName; } public Long getItenId() { return itenId; } public String getSiteId() { return siteId; } public Long getItemIdentifying() { return itemIdentifying; } public Date getUpdateTime() { return updateTime; } public void setEnrollAuditStatus(String enrollAuditStatus) { this.enrollAuditStatus = enrollAuditStatus; } public void setEnrollReturnCode(String enrollReturnCode) { this.enrollReturnCode = enrollReturnCode; } public void setParticipateRemark(String participateRemark) { this.participateRemark = participateRemark; } public void setEnrollRemark(String enrollRemark) { this.enrollRemark = enrollRemark; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public void setCreator(String creator) { this.creator = creator; } public void setUpdator(String updator) { this.updator = updator; } public void setDomainId(String domainId) { this.domainId = domainId; } public void setEnrollTime(Date enrollTime) { this.enrollTime = enrollTime; } public void setItemName(String itemName) { this.itemName = itemName; } public void setItenId(Long itenId) { this.itenId = itenId; } public void setSiteId(String siteId) { this.siteId = siteId; } public void setItemIdentifying(Long itemIdentifying) { this.itemIdentifying = itemIdentifying; } public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; } public void setParticipateId(Long participateId) { this.participateId = participateId; } public void setSupplier(DfSupplierPO supplier) { this.supplier = supplier; } public String getEnrollAuditStatus() { return enrollAuditStatus; } public Long getParticipateId() { return participateId; } public DfSupplierPO getSupplier() { return supplier; } }

 

 

供应商:

 

 <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" > <hibernate-mapping> <class name="com.dfe.bcm.po.DfSupplierPO" table="DF_SUPPLIER" > <id name="supplierId" type="java.lang.Long" column="supplier_id" > <generator class="native" /> </id> <property name="supplierName" type="java.lang.String" column="supplier_name" /> <property name="supplierAccount" type="java.lang.String" column="supplier_account" /> <property name="remark" type="java.lang.String" column="remark" /> <property name="groupId" type="java.lang.Long" column="group_Id" /> <property name="siteId" type="java.lang.String" column="site_id" /> <property name="domainId" type="java.lang.String" column="domain_id" /> <property name="createTime" type="java.sql.Timestamp" column="create_time" /> <property name="creator" type="java.lang.String" column="creator" /> <property name="updateTime" type="java.sql.Timestamp" column="update_time" /> <property name="updator" type="java.lang.String" column="updator" /> <property name="supplierPassword" type="java.lang.String" column="supplier_Password" /> <property name="approvalStatus" type="java.lang.String" column="approval_Status" /> <!--AddAt2010-12-13 --> <property name="companyName" type="java.lang.String" column="company_Name" /> <property name="address" type="java.lang.String" column="address" /> <property name="zipCode" type="java.lang.String" column="zip_Code" /> <property name="legalRepresentative" type="java.lang.String" column="legal_Representative" /> <property name="organizationCode" type="java.lang.String" column="organization_Code" /> <property name="businessLicenceNo" type="java.lang.String" column="business_Licence_No" /> <property name="registeredCapital" type="java.lang.String" column="registered_Capital" /> <property name="lineOfBusiness" type="java.lang.String" column="line_Of_Business" /> <property name="webSite" type="java.lang.String" column="web_Site" /> <property name="telphone" type="java.lang.String" column="telphone" /> <property name="fax" type="java.lang.String" column="fax" /> </class> </hibernate-mapping>

 

 

 

 

 package com.dfe.bcm.po; import java.util.Date; public class DfSupplierPO { private Long supplierId; private String supplierName; private String supplierAccount; private String remark; private Long groupId; //通用字段 private String siteId; private String domainId; private Date createTime; private String creator; private Date updateTime; private String updator; //补充字段 private String supplierPassword; private String approvalStatus; //AddAt2010-12-13 private String companyName;//公司名称 private String address;//地址 private String zipCode;//邮政编码 private String legalRepresentative;//法人代表 private String organizationCode;//组织机构代码 private String businessLicenceNo;//法人营业执照编号 private String registeredCapital;//注册资金 private String lineOfBusiness;//营业范围 private String webSite;//公司网址 private String telphone;//电话号码 private String fax;//传真 public String getRemark() { return remark; } public String getDomainId() { return domainId; } public Date getCreateTime() { return createTime; } public String getSupplierName() { return supplierName; } public Long getSupplierId() { return supplierId; } public String getSiteId() { return siteId; } public String getSupplierAccount() { return supplierAccount; } public String getCreator() { return creator; } public Date getUpdateTime() { return updateTime; } public String getUpdator() { return updator; } public void setGroupId(Long groupId) { this.groupId = groupId; } public void setRemark(String remark) { this.remark = remark; } public void setDomainId(String domainId) { this.domainId = domainId; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public void setSupplierName(String supplierName) { this.supplierName = supplierName; } public void setSupplierId(Long supplierId) { this.supplierId = supplierId; } public void setSiteId(String siteId) { this.siteId = siteId; } public void setSupplierAccount(String supplierAccount) { this.supplierAccount = supplierAccount; } public void setCreator(String creator) { this.creator = creator; } public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; } public void setUpdator(String updator) { this.updator = updator; } public void setSupplierPassword(String supplierPassword) { this.supplierPassword = supplierPassword; } public void setApprovalStatus(String approvalStatus) { this.approvalStatus = approvalStatus; } public void setBusinessLicenceNo(String businessLicenceNo) { this.businessLicenceNo = businessLicenceNo; } public void setWebSite(String webSite) { this.webSite = webSite; } public void setZipCode(String zipCode) { this.zipCode = zipCode; } public void setOrganizationCode(String organizationCode) { this.organizationCode = organizationCode; } public void setCompanyName(String companyName) { this.companyName = companyName; } public void setFax(String fax) { this.fax = fax; } public void setLineOfBusiness(String lineOfBusiness) { this.lineOfBusiness = lineOfBusiness; } public void setTelphone(String telphone) { this.telphone = telphone; } public void setAddress(String address) { this.address = address; } public void setRegisteredCapital(String registeredCapital) { this.registeredCapital = registeredCapital; } public void setLegalRepresentative(String legalRepresentative) { this.legalRepresentative = legalRepresentative; } public Long getGroupId() { return groupId; } public String getSupplierPassword() { return supplierPassword; } public String getApprovalStatus() { return approvalStatus; } public String getBusinessLicenceNo() { return businessLicenceNo; } public String getWebSite() { return webSite; } public String getZipCode() { return zipCode; } public String getOrganizationCode() { return organizationCode; } public String getCompanyName() { return companyName; } public String getFax() { return fax; } public String getLineOfBusiness() { return lineOfBusiness; } public String getTelphone() { return telphone; } public String getAddress() { return address; } public String getRegisteredCapital() { return registeredCapital; } public String getLegalRepresentative() { return legalRepresentative; } }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ItemEnroll报名表:

 

 

 

你可能感兴趣的:(Hibernate,Date,String,Class,generator,website)