EJB QL 通常不直接这样写。  你想要做的可以写成这样:SELECT OBJECT( c ) FROM Course AS c然后你直接用c.getClasses()不就可以得到一个course 的所有classes了吗?或者反过来,
SELECT OBJECT( c ) FROM Class AS c
然后用c.getCourse()不就可以得到一个class 所属的course了吗?

解决方案 »

  1.   

    我现在要查询出两张表的所有记录。如果你使用了EJB的映射,你只需要直接读取所有的课程即可,课时是一个附属属性
      

  2.   

    cmp数据库访问代码不是自动生成?
      

  3.   

    这就是1:N关系啊 ,一般书上都有啊 ,我copy 一段 :  
     单向 公司 和员工的  从公司可以找到所有员工 
    @Entity(name="CompanyOMUni")
    public class Company implements Serializable {
    private int id;
    private String name;
    private Collection<Employee> employees;

    public Company() {
    id = (int)System.nanoTime();
    }

    @Id
    public int getId() {
    return id;
    }

    public void setId(int id) {
    this.id = id;
    }

    public String getName() {
    return name;
    }

    public void setName(String name) {
    this.name = name;
    }
    // 1:N 关系  获取员工
    @OneToMany(cascade={CascadeType.ALL},fetch=FetchType.EAGER)
    public Collection<Employee> getEmployees() {
    return employees;
    }
    //设置员工信息
    public void setEmployees(Collection<Employee> employees) {
    this.employees = employees;
    }员工
    @Entity(name = "EmployeeOMUni")
    public class Employee implements Serializable
    {    private int id;
        private String name;
        private char sex;    public Employee()
        {
            id = (int) System.nanoTime();
        }    @Id
        public int getId()
        {
            return id;
        }    public void setId(int id)
        {
            this.id = id;
        }    public String getName()
        {
            return name;
        }    public void setName(String name)
        {
            this.name = name;
        }    public char getSex()
        {
            return sex;
        }    public void setSex(char sex)
        {
            this.sex = sex;
        }
    }在会话bean里加入了公司和员工
    @Stateless
    public class CompanyEmployeeOMUniBean implements CompanyEmployeeOM {
    @PersistenceContext
    EntityManager em; public void doSomeStuff() {
    Company c = new Company();  //新公司
    c.setName("M*Power Internet Services, Inc.");

    Collection<Employee> employees = new ArrayList<Employee>();
    Employee e = new Employee();
    e.setName("Micah Silverman");
    e.setSex('M');
    employees.add(e);

    e = new Employee();
    e.setName("Tes Silverman");
    e.setSex('F');
    employees.add(e);

    c.setEmployees(employees);
    em.persist(c);

                    //新公司
    c = new Company();
    c.setName("Sun Microsystems");

    employees = new ArrayList<Employee>();
    e = new Employee();
    e.setName("Rima Patel");
    e.setSex('F');
    employees.add(e);

    e = new Employee();
    e.setName("James Gosling");
    e.setSex('M');
    employees.add(e);

    c.setEmployees(employees);
    em.persist(c);


    em.persist(c);
    } public List getCompanies() {
    Query q = em.createQuery("SELECT c FROM CompanyOMUni c");
    return q.getResultList();
    }

    public List getCompanies2(String query) {
    Query q = em.createQuery(query);
    return q.getResultList();
    }

    public void deleteCompanies() {
    Query q = em.createQuery("DELETE FROM CompanyOMUni");
    q.executeUpdate();
    }
    }客户端
    InitialContext ic = new InitialContext();
    CompanyEmployeeOM ceom = (CompanyEmployeeOM)ic.lookup(CompanyEmployeeOM.class.getName());

    ceom.deleteCompanies();

    ceom.doSomeStuff();

    System.out.println("All Companies:");
    for (Object o : ceom.getCompanies()) {
    Company c = (Company)o;
    System.out.println("Here are the employees for company: "+c.getName());
    for (Employee e : c.getEmployees()) {
    System.out.println("\tName: "+e.getName()+", Sex: "+e.getSex());
    }
    System.out.println();
    }