0

我有 2 个问题:假设我们有一个名为 class 的实体和另一个名为 student。每个班都有一个学生。

public class Clas implements Serializable {
  @Id
      @GeneratedValue(strategy=GenerationType.SEQUENCE)
private int id;
@OneToMany(cascade=CascadeType.ALL)
Collection<Student> students;
  public clas(){
    super();
    }
 ..... getters and setters
}

q1:我得到异常没有要映射的字段,当添加任何其他列(如字符串名称)时,它可以工作,但我不需要该字段我能做什么?

q2: id是自动生成的,我想查询c1班的所有学生,但是我没有这个班级的id,怎么查询?

我正在使用 mysql 服务器 glassfish v2.1 toplink jpa 1.0

谢谢

4

2 回答 2

0

学生班级必须有一个名为“classID”(或其他)的属性,该属性引用

Clas 的 id 属性。这应该像@ManyToOne 一样注释。

如果 IDE 已经完成了,请检查 id 生成策略。比如你用的是mysql,主键是auto_increment,那么把id的策略设置为

GenerationType.AUTO 并重新编译。告诉我是否出现任何其他错误。:) 。

于 2011-12-26T10:28:00.807 回答
0

好的。我想我理解你的问题。您可以使用以查询语言编写的 NamedQueries,具体取决于您的库(在您的情况下为 toplink),例如 EJB QL 或 HBQL。您可以创建会话 Bean 进行查询。

public class ClassSessionBean {
    @PersistenceContext(unitName="your PU name in persistence . xml")
    private Entitymanager em;

    publicClas selectByID(int id) throws NoResultException {
        Query q = em.createQuery("select class from Class class where class.id=?");
        q.setParameter(1, id);
        Clas clas = q.getResultList();
        return clas;
    }
} 

请注意,上面的代码可能包含语法错误,因为我没有在任何地方检查过。

希望你能从中得到一些帮助:)。

于 2011-12-27T08:41:01.573 回答