ejb3 toplink jpa 1.0查询和排序

时间:2011-12-26 10:14:16

标签: mysql entity ejb-3.0 toplink 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时,它可以工作,但我不需要该字段我该怎么办? / p>

q2: ids是自动生成的,我想查询c1类中的所有学生,但我没有这个类的id,怎么做这样的查询?

使用mysql服务器glassfish v2.1 toplink jpa 1.0

由于

2 个答案:

答案 0 :(得分:0)

学生班必须有一个名为'classID'(或其他)的属性,引用

Clas的id属性。这应该像@ManyToOne一样注释。

如果已经由IDE完成,则检查id生成策略。例如,如果您使用的是mysql,则主键是auto_increment,然后将id的策略设置为

GenerationType.AUTO并重新编译。如果出现任何其他错误,请告诉我。 :)。

答案 1 :(得分:0)

确定。我想我理解你的问题。您可以使用以查询语言编写的NamedQueries,这取决于您的库(在您的情况下是toplink),如EJB QL或HBQL。您可以创建用于查询的会话Bean。

public class ClassSessionBean {
    @PersistenceContext(unitName="your PU name in persistence . xml")
    private Entitymanager em;

    publicClas selectByID(int id) throws NoResultException {
        Query q = em.createQuery("select class from Class class where class.id=?");
        q.setParameter(1, id);
        Clas clas = q.getResultList();
        return clas;
    }
} 

请注意,上面的代码可能包含语法错误,因为我没有在任何地方检查过它。

希望你能从中找到一些帮助:)。