请问一对多和多对多的关系在实体类里如何配置一对多:例如学生表和班级表@PersistenceCapable(identityType = IdentityType.APPLICATION)   
class Student {   
  
    @PrimaryKey  
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)   
    private Long sid;   
  
    @Persistent  
    private String sname;   
       
    @ ????? 这里怎么写   
    private Classx;   
  
    // set() get() ...   
}   
  
@PersistenceCapable(identityType = IdentityType.APPLICATION)   
class Classx {   
  
    @PrimaryKey  
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)   
    private Long sid;   
  
    @Persistent  
    private String sname;   
       
    @ ????? 这里怎么写   
    private Set<Students> Students;   
  
    // set() get() ...   

多对多:例如图片表和标签表,一个图片可以有多个标签,一个标签可以属于多个图片 按照面向对象的数据库思想,省去了图片和标签之间的关系表。但是这么做的话JDOQL语句应该怎么写,Google给的示例都是单表的操作的。求助啊@PersistenceCapable(identityType = IdentityType.APPLICATION)   
class Image {   
  
    @PrimaryKey  
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)   
    private Long iid;   
  
    @Persistent  
    private String isrc;   
  
    @ ????? 这里怎么写   
    private Set<Tag> tags;   
  
    // set() get() ...   
}   
  
@PersistenceCapable(identityType = IdentityType.APPLICATION)   
class Tag {   
  
    @PrimaryKey  
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)   
    private Long tid;   
  
    @Persistent  
    private String tname;   
  
    @ ????? 这里怎么写   
    private Set<Image> images;   
  
    // set() get() ...   
}  

解决方案 »

  1.   

    JDO不是通过@ 的不同来表明1-n的关系,你所说要填写的地方,还是要填:@Persistent  ,
    只是,代表关系的对象,其类定义中必须声明 @PersistenceCapable(你的类已经符合这个要求了)。------------第二个问题,我也还不太清楚。 
      

  2.   

    感谢回答,学生类和班级类现在改成这样了。import com.google.appengine.api.datastore.Key;@PersistenceCapable(identityType = IdentityType.APPLICATION)   
    class Student {   
      
        @PrimaryKey  
        @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)   
        private Key sid;
      
        @Persistent  
        private String sname;
           
        @Persistent  
        private Classx classx;
      
        // set() get() ...   
    }   
      
    @PersistenceCapable(identityType = IdentityType.APPLICATION)   
    class Classx {   
      
        @PrimaryKey  
        @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)   
        private Long cid;
      
        @Persistent  
        private String cname;
      
        // set() get() ...   
    } 修改以后可以正常查询和添加了,但是添加时会抛出异常(不影响添加):JDOFatalUserException、NucleusUserExceptionAttempt was made to manually set the id component of a Key primary key.  If you want to control the value of the primary key, set the name component instead.)还有一个问题就是JDO的外联语句怎么写?
      

  3.   

    JDO我只是有所了解,刚才查了一下资料,似乎不支持外连接:The datastore does not support join queries
    来自:
    http://code.google.com/appengine/docs/java/datastore/relationships.html