我有两个问题: 假设我们有一个名为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
由于
答案 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;
}
}
请注意,上面的代码可能包含语法错误,因为我没有在任何地方检查过它。
希望你能从中找到一些帮助:)。