ejb3 toplink jpa 1.0 стратегия запросов и идентификаторов - PullRequest
1 голос
/ 26 декабря 2011

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

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

iam, работающий с сервером mysql glassfish v2.1 toplink jpa 1.0

Спасибо

1 Ответ

0 голосов
/ 26 декабря 2011

Относительно вашего второго вопроса: когда вы создаете экземпляр 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.

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

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