ejb3 toplink jpa 1.0 стратегия запросов и последовательности идентификаторов

У меня есть 2 вопроса: предположим, у нас есть одна сущность с именем 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: я получаю исключение: нет полей для сопоставления из-за стратегии последовательности, при добавлении любого другого столбца, такого как имя строки, это работает, но мне не нужно это поле, что я могу сделать?

д2. идентификаторы создаются автоматически, и я хочу запросить всех учащихся в классе c1, но у меня нет идентификатора этого класса, как получить такой запрос без использования идентификатора? или как получить идентификатор объекта базы данных для запроса?

я работаю с сервером mysql Glassfish v2.1 toplink jpa 1.0

Спасибо


person Tommy    schedule 26.12.2011    source источник
comment
Покажите нам код, который вы пытаетесь выполнить, и полную трассировку стека исключения. Кроме того, покажите нам структуру таблицы, сопоставленной с Clas.   -  person JB Nizet    schedule 26.12.2011


Ответы (1)


Что касается вашего второго вопроса: когда вы создаете экземпляр Clas, сохраняете его и очищаете, идентификатор генерируется автоматически и назначается полю идентификатора экземпляра Clas. Поскольку сброс происходит автоматически в конце транзакции, вызов этого метода транзакционного компонента сеанса вернет экземпляр Clas с идентификатором:

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.

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

public Collection<Student> getStudentOfClas(int clasId) {
    Clas clas = entityManager.find(Clas.class, clasId);
    return clas.getStudents();
}
person JB Nizet    schedule 26.12.2011