ejb3 toplink jpa 1.0查询和id序列策略

时间:2011-12-26 12:17:34

标签: java mysql java-ee ejb-3.0 jpa-1.0

我有两个问题:假设我们有一个名为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

由于

1 个答案:

答案 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();
}