不管你的关联怎么复杂,但仔细看上去就很简单了,你的也就下面这几种关系
A和B表有关联
B和C表有关联
C和D表有关联
看上去复杂,其实不管你怎么复杂,你就和有关联的表进行配置了,
配置可以简单的分成两种,
第一种,存在主从关系的,
第二种,不存在主从关系,只是关联条件进行数据的查询。
那么以上两种情况的配置是不一样的。
对于以上你的表关系,你只要在A表配置和B表的关系(当然配置的是pojo类和hbm.xml文件)
B表配置和C表的关系,C表配置和D表的关系,这样不就简单了。对于怎么样配置主从表,和两个表之间关联查询,需要查询另外一个表的字段,配置方法可以参照我的blog,里面讲了这两种方法。
http://blog.csdn.net/tcmis对于你说的查询A表的数据,把其它表的数据都查询出来了,占用内存,这个是Hibernate有这样一个机制,就是关联表的数据加载方式,它可以延迟加载,那样就等于只加载A表的数据,不会影响什么的,但是你要用Struts去显示B,C,D的数据的时候,那么lazy属性必须是false。

解决方案 »

  1.   

    忘了说了,,麻烦是肯定的了,因为你的逻辑就是很复杂的,里如果用sql去写,还不是一个很复杂的sql..你说是不是?
      

  2.   

    非常感谢tcmis(难道你忘了吗?)的回复。
    比如说,A表是操作日志,B表是操作员。C表是操作员的角色。
    在A表中记录了操作员ID,因此,A表每条记录的ID可以对应到B表的一个操作员。B表每个记录就有一个ROLEID对应于C表的一个角色。
    在STRUTS显示时,我想返回一个日志列表(假设有100条),每条里面包含着一个操作员,操作员里又包含着若干角色?
    但是,我其实仅仅要显示列表及操作员名称而已,搞这么麻烦?
      

  3.   

    给你举个例子,就拿你的情况来说
    操作日志表(A)
    ---------------------------
    id                序号
    content           日志内容
    operationid       操作员ID操作员表(B)
    --------------------------
    id               序号
    name             操作员名称默认情况下hibernate会自动生成下面的pojo类和hbm.xml文件
    public abstract class AbstractA  implements java.io.Serializable {
      private String id;
      private String content;
      private String operationid;
      
      // 你需要在A表中增加一个字段,set/get方法都需要,
      private B b;
      .....
      get/set method
      ....}public class A extends AbstractA implements java.io.Serializable {   public A() {
        }    
        /** full constructor */
        public A(....省了...) {
            super(id, content, operationid);        
        }
       
    }..B表省略然后在A.hbm.xml文件中配置
            <many-to-one 
                name="b" 
                class="com.package.B" 
                fetch="select" 
                lazy="false"
                insert="false"
                update="false"
            >
                <column name="operationid" length="32" />
            </many-to-one>你可以在struts里面用下面方法显示名称了。<bean:write name="element" property="b.name"/>
      

  4.   

    不麻烦,我有个系统就是整个结构。lazy="false"