在objectdb中查询

时间:2012-05-17 14:20:00

标签: java sql database objectdb

我必须在objectdb中实现一个查询并且很少有想法。

问题是编写一个

的查询
Returns the collection of all laptops each of which has at least one
          other laptop preinstalled with the same processor.

我的笔记本电脑课程

public class Laptop {

    String modelName; // key
    int price;        // in dollars
    boolean hasHDScreen; // has a HD Screen ?
    int hardDriveCapacity; // in GB

    Processor processor;  // the preinstalled processor
    Memory memory; // the preinstalled memory
    Company madeBy; // the inverse of company.makeLaptops
}

我的处理器类是

public class Processor {

    String modelName; // key 
    float clockSpeed; // in gigahertz (GHz)

    Company madeBy; // the inverse of Company.makeProcessors
}   

我的功能定义如下所示

public static Collection<Laptop> sameProcessor(Query q) {
        /* Returns the collection of all laptops each of which has at least one
         * other laptop preinstalled with the same processor.
         */
        q.setClass(Laptop.class);
        q.setFilter("this.processor == ");

    } 

我怎样才能实现它? SQL也没关系。

由于

1 个答案:

答案 0 :(得分:1)

终于克服了这一个。这是解决方案

public static Collection<Laptop> sameProcessor(Query q) {
        /* Returns the collection of all laptops each of which has at least one
         * other laptop preinstalled with the same processor.
         */

        Collection result = new HashSet<Laptop>();
        q.setClass(Laptop.class);

        Collection allLaptops = (Collection) q.execute();

        Iterator it = allLaptops.iterator();

        while(it.hasNext()) {
            Laptop currentLaptop = ((Laptop)it.next());
            Processor p = currentLaptop.processor;
            if(p.installedOn(q).size()>=2) {

                result.add(currentLaptop);
            }
        }

        return (Collection<Laptop>)result;       
    } 

使用installedOn定义的方法如下:

public Collection<Laptop> installedOn(Query q) {

     /* Returns the collection of all laptops on which the target memory 
        is preinstalled. Represents the inverse of Laptop.memory.
     */
        Memory memory = this;
        q.setClass(Laptop.class);
        q.declareParameters("Memory m");
        q.setFilter("this.memory == m");
        Collection result = (Collection)q.execute(memory);
        return (Collection<Laptop>) result;

    }

感谢。希望它有所帮助。