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

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

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

相关文章:

java - 如何从 object.getClass().getDeclaredField ("fieldname").getGenericType(); 返回的 List<T> 获取 typeArguments

java - Portlet 中的保存和加载操作 - jsp 文件找不到该文件

php - 在 PHP 环境中的另一个查询中使用一个 MySQL 查询的结果

mysql - hibernate 设置属性以触发数据库更新

jsf - 是否可以在 Java Server Faces 中创建只写字段绑定(bind)?

PHP + MySQL 查询 : Unexpected results (for small number of results only)

java - Jasper Reports w/Maven - 如何指定要编译的 Java 版本?

java - 通过 JNA 调用 native 库时的并发问题

java - 如何在Java中实现实例的final方法的监听器

mysql - SQL:选择列的每个单独值的总和