我有两个问题:假设我们有一个名为 class 的实体和另一个名为 student 的实体。每个类(class)都有一个学生。
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:我得到异常,因为序列策略没有要映射的字段,当添加任何其他列(如字符串名称)时,它有效,但我不需要该字段我该怎么办?
问题 2。 id是自动生成的,我想查询c1类的所有学生,但是我没有这个类的id,如何不使用id查询?或者如何获取数据库实体 ID 以对其进行查询?
我正在使用 mysql 服务器 glassfish v2.1 toplink jpa 1.0
谢谢
最佳答案
关于你的第二个问题:当你创建一个 Clas 实例,将它持久化并刷新时,ID 是自动生成的,并分配给 Clas 实例的 ID 字段。由于刷新在事务结束时自动发生,调用此事务 session 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.
一旦你有了类(class) ID,并想得到它的所有学生,只需执行以下操作:
public Collection<Student> getStudentOfClas(int clasId) {
Clas clas = entityManager.find(Clas.class, clasId);
return clas.getStudents();
}
关于java - ejb3 toplink jpa 1.0查询和id序列策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8635695/