使用一个抽象的java类test,test中只有二个属性cname和dname。设置set/get方法

解决方案 »

  1.   

    把test设置为一个Bean,然后循环设置和读取就可以了。当然,也可以不用Bean,直接从List中读取Object,然后转化成相应的值,看自己的需求了。
      

  2.   

     1、将Test定义为一个Bean
    2、提供默认构造函数和一个有参数的构造函数,这个有参数的构造函数的参数分别为cid,cname,cpwd,did,dname,dpwd
    3、String sql="select new Test(cid,cname,cpwd,did,dname,dpwd
    ) from Test1 c,Test2 d where c.Cid=d.Did";执行返回List<Test>
      

  3.   

    一般很少这么做 
    你可以直接写sql
    hibernate支持sql语句的是在不行 你可以几个表关联建立个视图,这个视图和你po进行映射,然后直接写hql就可以了
      

  4.   


    您好,我用您的hql语句试了试,出错了,信息为:
     Unable to locate class [Test] [select new Test(CId,CName,DId,DName) from y.model.Test1 c,y.model.Test2 d where c.CId=d.DId]我的方法是:
    public List<Test> getAll()
    {
    String sql="select new Test(CId,CName,DId,DName) from Test1 c,Test2 d where c.CId=d.DId";

    return (List<Test>)super.find(sql);
    }
    另外我试了试用String sql="select new y.model.Test(CId,CName,DId,DName) from Test1 c,Test2 d where c.CId=d.DId";语句写,报的是空指针错误,请高手帮我解决一下吧,麻烦你了.另附上,test,test1,test2,映射类:
    Test:
    package y.model;import java.io.Serializable;
    import java.util.Date;
    /**
    * 多表联合查询测试实体类
    * @param classname
    * @param info
    * @param project
    * @param classChineseName
    */public class Test implements Serializable {
        //无参数构造方法
        public Test()
        {
            super();
        }    //编号
        private String CId;
        public String getCId(){
            return this.CId;
        }    public void setCId(String CId){
            this.CId=CId;
    }
        //姓名
        private String CName;
        public String getCName(){
            return this.CName;
        }    public void setCName(String CName){
            this.CName=CName;
    }
        //编号
        private String DId;
        public String getDId(){
            return this.DId;
        }    public void setDId(String DId){
            this.DId=DId;
    }
        //姓名
        private String DName;
        public String getDName(){
            return this.DName;
        }    public void setDName(String DName){
            this.DName=DName;
    }
    //含参数构造方法
    public Test(String cId,String cName,String dId,String dName)
    {
    super();
    this.CId=cId;
    this.CName=cName;
    this.DId=dId;
    this.DName=dName;
    }
    }Test1:
    package y.model;import java.io.Serializable;
    import java.util.Date;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.Table;
    import org.hibernate.annotations.GenericGenerator;@Entity
    @Table(name = "test1")
    public class Test1 implements Serializable {
        @Id
        @GenericGenerator(name = "generator", strategy = "uuid.hex")
        @GeneratedValue(generator = "generator")    @Column(name = "C_Id") 
        private String CId;    @Column(name = "C_Name") 
        private String CName;    @Column(name = "C_Pwd") 
        private String CPwd;    @Column(name = "C_Sex") 
        private String CSex;    @Column(name = "C_Ago") 
        private String CAgo;    public String getCId(){
            return this.CId;
        }    public void setCId(String CId){
            this.CId=CId;
    }    public String getCName(){
            return this.CName;
        }    public void setCName(String CName){
            this.CName=CName;
    }    public String getCPwd(){
            return this.CPwd;
        }    public void setCPwd(String CPwd){
            this.CPwd=CPwd;
    }    public String getCSex(){
            return this.CSex;
        }    public void setCSex(String CSex){
            this.CSex=CSex;
    }    public String getCAgo(){
            return this.CAgo;
        }    public void setCAgo(String CAgo){
            this.CAgo=CAgo;
    }}Test2:package y.model;import java.io.Serializable;
    import java.util.Date;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.Table;
    import org.hibernate.annotations.GenericGenerator;@Entity
    @Table(name = "test2")
    public class Test2 implements Serializable {
        @Id
        @GenericGenerator(name = "generator", strategy = "uuid.hex")
        @GeneratedValue(generator = "generator")    @Column(name = "D_Id") 
        private String DId;    @Column(name = "D_Name") 
        private String DName;    @Column(name = "D_Pwd") 
        private String DPwd;    @Column(name = "D_Age") 
        private Integer DAge;    @Column(name = "D_Addr") 
        private String DAddr;    @Column(name = "D_Sex") 
        private String DSex;    public String getDId(){
            return this.DId;
        }    public void setDId(String DId){
            this.DId=DId;
    }    public String getDName(){
            return this.DName;
        }    public void setDName(String DName){
            this.DName=DName;
    }    public String getDPwd(){
            return this.DPwd;
        }    public void setDPwd(String DPwd){
            this.DPwd=DPwd;
    }    public Integer getDAge(){
            return this.DAge;
        }    public void setDAge(Integer DAge){
            this.DAge=DAge;
    }    public String getDAddr(){
            return this.DAddr;
        }    public void setDAddr(String DAddr){
            this.DAddr=DAddr;
    }    public String getDSex(){
            return this.DSex;
        }    public void setDSex(String DSex){
            this.DSex=DSex;
    }}
      

  5.   


    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Date;
    import java.util.List;
    import java.util.Vector;import org.hibernate.Query;
    import org.hibernate.Session;
    import org.hibernate.Transaction;import y.model.Test;
    import y.model.Test1;
    import y.model.Test2;import com.targ.track.financeManager.buildProjectAccount.domain.BuildProjectAccount;
    import com.targ.track.financeManager.buildProjectAccount.domain.BuildProjectAccountDetail;
    import com.targ.track.startAppManager.domain.StartApplication;public class MyJunitTest {
    @org.junit.Test
    public void testDDL(){
    //插入数据
    HibernateTest.doInHibernateSession(new InHibernateSession(){
    @Override
    public Object doInHibernateSession(Session session) {
    Test1 test1 = new Test1();
    test1.setCAgo("CAgo");
    test1.setCName("CName");
    test1.setCPwd("CPwd");
    test1.setCSex("CSex");
    Test2 test2 = new Test2();
    test2.setDAddr("DAddr");
    test2.setDAge(123);
    test2.setDName("DName");
    test2.setDPwd("DPwd");
    test2.setDSex("DSex");
    session.save(test1);
    session.save(test2);
    return null;
    }
    });
    //查询
     List<Test> all = (List<Test>) HibernateTest.doInHibernateSession(new InHibernateSession(){
    public Object doInHibernateSession(Session session) {
    String sql="select new y.model.Test(c.CId,c.CName,d.DId,d.DName) from Test1 c,Test2 d where c.CId=d.DId";
    Query query = session.createQuery(sql);
    return query.list();
    }
    });
     for(Test test : all){
     System.out.println(test);
     }

    }
    public static class HibernateTest {
    public static Object doInHibernateSession(InHibernateSession doInHibernateSession){
    Session session = HibernateSessionFactory.getSession();
    Transaction transaction = session.beginTransaction();
    try{
    Object object =  doInHibernateSession.doInHibernateSession(session);
    transaction.commit();
    return object;
    }catch(RuntimeException e){
    try{
    System.err.println("rollback");
    transaction.rollback();
    }catch(RuntimeException ex){
    System.err.println("回滚失败!");
    }
    throw e;
    }finally{
    //HibernateSessionFactory.closeSession();
    } } }
    public interface InHibernateSession {
    public Object doInHibernateSession(Session session);
    }}
      

  6.   

    重点找到了吗?
     String sql="select new Test(CId,CName,DId,DName) from Test1 c,Test2 d where c.CId=d.DId"要加前缀啊! c.CId c.CName d.DId d.DName
      

  7.   

    太感谢了,我就是大小写出现问题了,所以我的HQL语句总报错,谢谢你了,还有一个问题,  String sql="select new y.model.Test(c.CId,c.CName,d.DId,d.DName) from Test1 c,Test2 d where c.CId=d.DId";可以查询cid,cname,did,dname,同理假如我现在在表test1中增加一字段为CScore,分数,我的sql语句应为:sql="select new y.model.Test(c.CId,c.CName,c.CSCcoe,d.DId,d.DName) from Test1 c,Test2 d where c.CId=d.DId"(相应的构造方法同时生成);现在我有另一需求,就是我想得到查询结果分数的总和,也就是说需要聚合函数sum。我这hql语句应该怎么写?同理,avg等其他聚合函数呢?麻烦了
      

  8.   

    还有,朋友,我就是问问,假如我的这两张表中有相重复的字段,我应该怎么办?就是假如test1表中有Cid,test2中也有cid,那么我这个实体类是不是就不能这么写了,假如我想获得到这两个Id,我应该怎么做呢?麻烦您了,谢谢
      

  9.   

    有重复名字的字段的话,查询的时候给表取别名吧
    select b1.cid,b2.cid from table1 b1,table2 b2 where ....
      

  10.   

    这分赚到累死了。
    ①你想用聚合函数那没有问题啊
    hql写成 select sum(c.CSCcoe) from Test1 c,Test2 d where c.CId=d.DId,其他你看着办。这问题你为什么不看官方文档啊?
    ②12楼的问题,用13楼回答。
      

  11.   

    请问一下,那个Test的类是要自己建吗?