2011-12-26 71 views
0

我有两个问题: 假设我们有一个名为class的实体,另一个名为student。每班都有热衷学生的学生。ejb3 toplink jpa 1.0查询和排序

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,该怎么做这样的查询?

与MySQL服务器的GlassFish v2.1的IAM工作的TopLink JPA 1.0

感谢

回答

0

学生类必须有一个属性命名 '的classID'(或其他)是指

柯乐的id属性。这应该注释为@ManyToOne。

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

GenerationType.AUTO并重新编译。告诉我是否有其他错误出现。 :)。

+0

看我有表正确解决,我坚持数据到它和关联表工作正常,问题是我将如何查询这些数据就像使用类ID类1我需要让这个类的所有学生1 ??? getallstudents(Class c1)方法>从学生的类c1中选择s,其中c1.ID =:ID就像这样? – Tommy 2011-12-26 11:35:00

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; 
    } 
} 

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

希望你从这里找到一些帮助:)。