【问题标题】:ejb3 toplink jpa 1.0 querying and id sequence strategyejb3 toplink jpa 1.0 查询和id序列策略
【发布时间】:2012-01-27 23:20:52
【问题描述】:

我有 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

谢谢

【问题讨论】:

  • 向我们展示您尝试执行的代码,以及异常的完整堆栈跟踪。另外,向我们展示映射到 Clas 的表的结构。

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


【解决方案1】:

关于您的第二个问题:当您创建 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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    相关资源
    最近更新 更多