我在这里所说的对象也就是用Criteria实现
不好意思了,被弄晕了

解决方案 »

  1.   

    userBasicInfo中的ID应该是userRegInfo中的外键吧,在userRegInfo里有没有封装一个
    UserBasicInfo类型的变量?
      

  2.   

    <hibernate-mapping default-access="field">
      <class name="org.jbpm.identity.User" 
             table="T_SYSTEM_USER">
        <id name="ID" column="ID"><generator class="assigned" /></id>
        <property name="REGNAME" column="REGNAME"/>
        <property name="PASSWORD" column="PASSWORD"/>
        <set name="memberships" cascade="all">
          <key column="USER_" />
          <one-to-many class="org.jbpm.identity.Membership" />
        </set>
        <set name="permissions" cascade="all" table="ID_PERMISSIONS">
          <key column="ENTITY_" foreign-key="none" />
          <element type="org.jbpm.identity.hibernate.PermissionUserType">
            <column name="CLASS_"/>
            <column name="NAME_"/>
            <column name="ACTION_"/>
          </element>
        </set>    
      </class>
    </hibernate-mapping>
    类似这样应该可以
      

  3.   

    langliu(魑魅魍魉)这是设置一对多关系的吧
    设置好了后呢
    怎么用Criteria实现查询
      

  4.   

    不用配置它们的关系,你想想SQL里面要关联两个表,只要字段满足条件就行了
      

  5.   

    我的SQL语句是这样的
    select userRegInfo.regName,userBasicInfo.nickname,userBasicInfo.realName
    from userRegInfo inner join userBasicInfo
    on userRegInfo.ID = userBasicInfo.ID
    where userRegInfo.ID = 1按道理来说,查询出来结果集会有三个字段
    可是我打印出来的时候却不行
    提示说数组越界的错误
      

  6.   

    我现在可以解决2个表之间的查询,但是3个以上的表就不知道怎么办了?
    我是使用CUSTOMERS表和ORDERS表,是一对多的关系,HBM.XML是如下配置的.
    Order.hbm.xml:
    <?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="src.mypack.Order" table="ORDERS">
          <id name="id" type="long" column="ID">
            <generator class="increment"/>
          </id>
          <property name="orderNumber" type="string" >
            <column name="ORDER_NUMBER" length="15" />
          </property>
          <many-to-one name="customer" column="CUSTOMER_ID"  class="src.mypack.Customer"  outer-join="true"  />
        </class> 
    </hibernate-mapping><?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 >Customer.hbm.xml:
      <class name="src.mypack.Customer" table="CUSTOMERS" >
        <id name="id" type="long" column="ID">
          <generator class="increment"/>
        </id>
        <property name="name" type="string" >
            <column name="NAME" length="15" />
        </property>
        <set name="orders" inverse="true" lazy="true" batch-size="4">
            <key column="CUSTOMER_ID" />
            <one-to-many class="src.mypack.Order" />
         </set>
      </class>
    </hibernate-mapping>
    然后很简单, 一个Customer.java和一个Order.java.
    然后通过DAO去取得,Order的对象, 而Order里面由于有Customer的对象,直接通过Order就可以取得CUSTOMERS表里面的值.
    在贴一下,Order.java的SOURCE
    package src.mypack;
    import java.io.Serializable;
    import org.apache.commons.lang.builder.ToStringBuilder;
    /** @author Hibernate CodeGenerator */
    public class Order implements Serializable {    /** identifier field */
        private Long id;
        /** nullable persistent field */
        private String orderNumber;
        /** nullable persistent field */
        private src.mypack.Customer customer;
        /** full constructor */
        public Order(String orderNumber, src.mypack.Customer customer) {
            this.orderNumber = orderNumber;
            this.customer = customer;
        }
        /** default constructor */
        public Order() {
        }
        public Long getId() {
            return this.id;
        }
        public void setId(Long id) {
            this.id = id;
        }
        public String getOrderNumber() {
            return this.orderNumber;
        }
        public void setOrderNumber(String orderNumber) {
            this.orderNumber = orderNumber;
        }
        public src.mypack.Customer getCustomer() {
            return this.customer;
        }
        public void setCustomer(src.mypack.Customer customer) {
            this.customer = customer;
        }
        public String toString() {
            return new ToStringBuilder(this)
                .append("id", getId())
                .toString();
        }
    }但是要是加上一个表ORDERDETIAL就是ORDERS表的详细内容的表, 是多对一的关系, 我试着从OrderDetail对象去取Order和Customer都是可以的,但从Order开始去取OrderDetail和Customer就不行, 就算是取到了数据变成Order和OrderDetail的一对一.有什么解决办法
      

  7.   

    再补充一下,增加一个DETAIL表之后,HBM.XML有些改动.
    贴出来, 大家指教一下Order.hbm.xml<?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="src.mypack.Order" table="ORDERS">
          <id name="id" type="long" column="ID">
            <generator class="increment"/>
          </id>
          <property name="orderNumber" type="string" >
            <column name="ORDER_NUMBER" length="15" />
          </property>
          <many-to-one  name="customer"  column="CUSTOMER_ID"  class="src.mypack.Customer"  outer-join="true" />
        <set  name="orderdetails" inverse="true" lazy="true" batch-size="4">
          <key column="ID" />
          <one-to-many class="src.mypack.Orderdetail"/>
        </set>
        </class>
    </hibernate-mapping>新增加的ORDERDETAIL表的HBM.XML
    Orderdetail.hbm.xml<?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="src.mypack.Orderdetail" table="ORDERDETAIL" >
        <id name="id" type="long" column="ID">
          <generator class="increment"/>
        </id>
        <property name="sum" type="long" >
            <column name="SUM"  length="9"/>
        </property>
        <many-to-one name="order" column="ORDER_ID" class="src.mypack.Order" outer-join="true" />
      </class>
    </hibernate-mapping>
      

  8.   

    Order.java也增加了对OrderDetail的操作
    增加一个属性
        /** persistent field */
        private Set orderdetails;
        public Set getOrderdetails() {
            return this.orderdetails;
        }
    同时也增加对这个属性的GET和SET
        public void setOrderdetails(Set orderdetails) {
            this.orderdetails = orderdetails;
        }然后想用Order对象去取orderdetails, 是能取到,但是每个orderdetails里面就一条数据,好象是变成了Order和OrderDetail的一对一的关系了.不知道错在哪里