我有两个问题:假设我们有一个名为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: id是自动生成的,我想查询c1班的所有学生,但我没有这个班的id,如何查询?
我正在使用mysql服务器glassfish v2.1。
谢谢
学生类必须有一个名为'classID'(或其他)的属性来引用
类的id属性。应该像@ManyToOne那样注释。
如果IDE已经完成了,那么检查id生成策略。例如,如果你正在使用mysql,主键是auto_increment,那么将id的策略设置为
GenerationType。AUTO和重新编译。如果出现其他错误,请告诉我。:)。
ok。我想我明白你的问题了。您可以使用依赖于您的库(在您的情况下是topplink)的查询语言编写的NamedQueries,如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;
}
}
请注意,上面的代码可能包含语法错误,因为我没有在任何地方检查它。
希望你能从中得到一些帮助。