0
好吧,所以我想得到映射組和學生在一張表中,但我有一個錯誤:「對象引用未保存的瞬態實例」。如果我添加級聯到所有它會說這個對象已經存在。哪裏不對 ?對象引用一個未保存的瞬態實例錯誤
下面是實體:
@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);
1)您提供的代碼片段不完整,dodajListeOsob丟失。 2)是從容器託管代碼中調用的示例測試代碼? 3)哪一行會拋出「對象引用一個未保存的瞬態實例」以及哪一個「對象存在」? – 2013-05-13 23:06:19
1)sory,我只是在底部添加方法: public void dodajListeOsob(listaOsob l){ \t eM.persist(l); } 2)示例從獨立應用程序遠程調用 3)obj.dodajListeOsob(lista);拋出錯誤但對象arleady存在只有當我添加cascade.ALL到@manytoone() – Gravian 2013-05-13 23:18:11
它似乎工作,如果我從ID字段中刪除@GeneratedValue。 – Gravian 2013-05-14 00:26:49