1

我有 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。ids是自动生成的,我想查询c1班的所有学生,但是我没有这个班的id,如何在不使用id的情况下获得这样的查询?或者如何获取数据库实体ID来查询它?

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

谢谢

4

1 回答 1

0

关于您的第二个问题:当您创建 Clas 实例、持久化并刷新时,ID 会自动生成,并分配给 Clas 实例的 ID 字段。由于刷新在事务结束时自动发生,因此调用此事务会话 bean 方法将返回一个带有 ID 的 Clas 实例:

public Clas createClas() {
    Clas c = new Clas();
    // call setters to populate the clas
    entityManager.persist(c);
    return c;
}

来电代码:

Clas c = mySessionBean.createClas();
int clasId = c.getId(); // clasId is the generated ID of the created Clas.

获得班级 ID 并想要获取其所有学生后,只需执行以下操作:

public Collection<Student> getStudentOfClas(int clasId) {
    Clas clas = entityManager.find(Clas.class, clasId);
    return clas.getStudents();
}
于 2011-12-26T14:09:14.517 回答