わかりましたので、マップされたグループと学生を 1 つのテーブルに取得したいのですが、「オブジェクトは保存されていない一時的なインスタンスを参照しています」というエラーが発生しました。すべてにカスケードを追加すると、このオブジェクトが既に存在すると表示されます。なにが問題ですか ?
エンティティは次のとおりです。
@Entity
@Table(name = "listaosob")
public class listaOsob implements Serializable {
@Id
@GeneratedValue
private int id;
private static final long serialVersionUID = 1L;
@ManyToOne
private Student student;
@ManyToOne
private Grupa grupa;
@Entity
@Table(name = "student")
public class Student implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private int id;
private String imie;
private String nazwisko;
private String login;
private String haslo;
@Column(unique=true)
private int nr_albumu;
@Column(unique=true)
private String kod_karty;
@Entity
@Table(name = "grupa")
public class Grupa implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private int id;
private String nazwa;
private Time godzina;
private String sala;
private String tydzien;
@ManyToOne
private Prowadzacy prowadzacy;
ejb コード:
@Stateless
@LocalBean
public class StudentBean implements StudentBeanRemote, StudentBeanLocal {
@PersistenceContext
private EntityManager eM;
public StudentBean() {}
public void dodajStudenta(Student s) {
eM.persist(s);
eM.flush();
}
public void usunStudenta(Student s) {
eM.remove(s);
eM.flush();
}
@SuppressWarnings("unchecked")
public ArrayList<Student> listaStudentow() {
Query query = eM.createQuery("SELECT e FROM student e");
return (ArrayList<Student>) query.getResultList();
}
@SuppressWarnings("unchecked")
public ArrayList<Student> listaStudentow(Grupa grupa) {
Query query = eM.createQuery("SELECT e FROM listaosob e WHERE e.grupa = :grupa");
query.setParameter("grupa", grupa);
return (ArrayList<Student>) query.getResultList();
}
public void dodajGrupe(Grupa g) {
eM.persist(g);
}
public void usunGrupe(Grupa g) {
eM.remove(g);
eM.flush();
}
public void dodajListeOsob(listaOsob l) {
eM.persist(l);
}
およびテスト例:
Student name1 = new Student("new"+gen.nextInt(),"nazwisko","log", "haslo", "asd"+gen.nextInt(), gen.nextInt());
obj.dodajStudenta(name1);
Grupa n = new Grupa();
obj.dodajGrupe(n);
listaOsob lista = new listaOsob(name1, n);
obj.dodajListeOsob(lista);