hibernate中的关系实现

  在hibernate中当遇到一个po在某一个po中作为属性存在时候,这个应该是一种关系,活动和员工,活动自身,存在以下关系.
 
 
3.1多对一关系,活动本身是自关联的,同时他和员工是个多对一的关系.一个员工可能创建多个活动.

    <many-to-one
   
name="staff"
 
   class="cattsoft.sxms.ejb.po.Staff"
     
not-null="true"  >
 
<column name="CREATE_STAFF_ID" /
 
</many-to-one>

多对一关系,name属性指向一表的持久化类名称,class属性表示他的存储路径

<column name>中的name属性表示一方向表在多方向po中的外键属性.也就是两个表的关联属性.

3.2自关联关系,当为一对多关系的时候一方向的设置,由于一方向要存储多方向的对象集合所以设置的时候要用到<set>

      <set

        name="tasks"

        lazy="true"

        inverse="true"

        >

        <key>
   
  <column name="PARENT_TASK_ID" />//表示一方向表的主键

        </key>

        <one-to-many

            class="cattsoft.sxms.ejb.po.Task"//多方向的类路径

          />

    </set>

    <!-- bi-directional many-to-one association to Task -->

    <many-to-one

        name="task"

        class="cattsoft.sxms.ejb.po.Task"

        not-null="true"

    >

        <column name="PARENT_TASK_ID" />//表示外键名称

    </many-to-one>

这个是设置了Task的自关联关系.

<o:p> </o:p>

<o:p> </o:p>

1.       DAO中我们利用po查询信息的时候利用拼凑hql语句的方法来进行实现

     String hql = " from Task as a where ";

<o:p> </o:p>

        if ((task.getTaskId() != null) && (task.getTaskId().intValue() > 0)) {

            hql += ("a.taskId = " + task.getTaskId() + " and ");

        }

<o:p> </o:p>

        if ((task.getRemarks() != null) && (!"".equals(task.getRemarks()))) {

            hql += ("a.remarks='" + task.getRemarks() + "' and ");

        }

<o:p> </o:p>

如果要利用当前po中的一个对象来进行查询的时候,为什么会出现一个对象呢?那是因为我们存在多对一的关系.

这个是活动执行计划表的映射文件的一部分

<o:p> </o:p>

活动执行计划表和活动表是多对一的关系.

<many-to-one

        name="task"

        class="cattsoft.sxms.ejb.po.Task"

        not-null="true"

    >

        <column name="TASK_ID" />

</many-to-one>

<o:p> </o:p>

当我们要利用活动编号来进行查询活动执行计划的相关信息的时候!需要像以下方式来构造hql语句.

<o:p> </o:p>

  if ((taskExecPlan.getTask()!= null) &&

                (!"".equals(taskExecPlan.getTask().getTaskId()))) {

            hql += ("a.task.taskId='" + taskExecPlan.getTask().getTaskId() + "' and ");

        }

不知道为什么不可以利用

taskExecPlan.getTask().getTskId()!= null

来进行判空,一这样作就立马出错,好像是空指针吧!反正是一堆红的!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值