我有两个问题:假设我们有一个名为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:我得到异常因为序列策略没有要映射的字段,当添加任何其他列如String name时,它可以工作,但我不需要该字段我该怎么办?
Q2。 ids是自动生成的,我想查询类c1中的所有学生,但我没有这个类的id,如何在不使用id的情况下获得这样的查询?或者如何获取数据库实体id来查询它?
使用mysql服务器glassfish v2.1 toplink jpa 1.0
由于
答案 0 :(得分: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.
一旦你拥有了clas ID,并希望得到所有学生,只需执行以下操作:
public Collection<Student> getStudentOfClas(int clasId) {
Clas clas = entityManager.find(Clas.class, clasId);
return clas.getStudents();
}