2011-12-26 2 views
1

У меня есть 2 вопроса: предположим, что у нас есть одна сущность с именем class и другая называется student. каждый класс имеет onetomany студентов.ejb3 toplink jpa 1.0 стратегия запросов и идентификаторов ID

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. Иды автогенерируются, и я хочу запросить всех учащихся в классе c1, но у меня нет идентификатора этого класса, как получить такой запрос без использования id? или как получить идентификатор объекта базы данных для запроса на него?

РМКО работа с MySQL сервер GlassFish v2.1 TopLink JPA 1.0

Благодаря

+0

Покажите нам код, который вы пытаетесь выполнить, и полную трассировку стека исключения. Также покажите нам структуру таблицы, сопоставленной с Clas. –

ответ

0

Что касается вашего второго вопроса: при создании экземпляра Класа, сохраняется, и на одном уровне, то идентификатор генерируется автоматически и назначается в поле ID экземпляра Clas. Так как промывка происходит автоматически в конце сделки, назвав этот транзакционный метод сессионного компонента возвращает экземпляр CLAs с ID:

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. 

После того как вы CLAs ID, и хотите получить все его ученики, просто сделайте следующее:

public Collection<Student> getStudentOfClas(int clasId) { 
    Clas clas = entityManager.find(Clas.class, clasId); 
    return clas.getStudents(); 
} 
+0

Большое спасибо, ты потрясающий, спасибо еще раз. – Tommy