我得到這個錯誤,我明白這個錯誤,但我不明白爲什麼我得到這個錯誤。我的模型Course
有許多Session
和Session
屬於1 Course
。當我嘗試將會話添加到課程的會話列表中時,我會得到這個結果。這裏是我的代碼播放框架「NullPointerException發生:null」
我的控制器方法:
public static void session(Course course, Integer sessionCapacity){
Session session = new Session(course, sessionCapacity);
course.save();
session.save();
if(session != null){
course.sessions.add(session);
course.save();
}
index();
}
我查看的形式:
#{form @Courses.session(), id:'session'}
<input type="hidden" name="course" value = ${course} />
<input type="text" name="sessionCapacity" />
<input type="submit" value="Add a session" />
#{/form}
我的會議模式:
@Entity
public class Session extends Model {
public Integer capacity;
@ManyToOne
Course course;
public Session(Course course, Integer capacity) {
// TODO Auto-generated constructor stub
this.course = course;
this.capacity = capacity;
}
}
我的課程模式有這樣的關係:
@OneToMany
public List<Session> sessions;
編輯1 :::: 所以我發現這個link,並根據它我應該初始化列表中,使我在我的課程模式更新爲public List<Session> sessions = new ArrayList<Session>();
,但它仍然無法正常工作。 :(
EDIT 2 :::
這裏是堆棧我得到
17:05:56,680 DEBUG ~ select course0_.id as id4_1_, course0_.capacity as capacity4_1_, course0_.courseCode as courseCode4_1_, course0_.courseDescription as courseDe4_4_1_, course0_.courseName as courseName4_1_, course0_.department_id as department6_4_1_, department1_.id as id0_0_, department1_.DepartmentCode as Departme2_0_0_, department1_.DepartmentName as Departme3_0_0_ from Course course0_ left outer join Department department1_ on course0_.department_id=department1_.id where course0_.id=?
17:06:03,456 ERROR ~
@6gbd9kpep
Internal Server Error (500) for request POST /courses/session
Execution exception (In /app/models/Course.java around line 37)
NullPointerException occured : null
play.exceptions.JavaExecutionException
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:237)
at Invocation.HTTP Request(Play!)
Caused by: java.lang.NullPointerException
at models.Course.AddSession(Course.java:37)
at controllers.Courses.session(Courses.java:36)
at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:557)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:508)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:484)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:479)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:161)
... 1 more
和37號線是this.sessions.add(session);
編輯3 ::: 這是我的課程班
@Entity
public class Course extends Model {
public String courseName;
public String courseCode;
@Lob
public String courseDescription;
@ManyToOne
public Department department;
public Integer capacity;
@OneToMany
public List<Session> sessions = new ArrayList<Session>();
public Course(String courseName, String courseCode, String courseDescription, Department department){
this.courseName = courseName;
this.courseCode = courseCode;
this.courseDescription = courseDescription;
this.department = department;
}
public void AddSession(Integer capacity){
Session session = new Session(this, capacity);
//session.save();
this.sessions.add(session);
this.save();
}
public void specifyCapacity(Integer Capacity){
this.capacity = Capacity;
this.save();
}
}
編輯4 ::: 012上的新錯誤在public void AddSession(Integer capacity)
17:27:46,017 DEBUG ~ insert into Course_Session (Course_id, sessions_id) values (?, ?)
17:27:46,059 ERROR ~
@6gbd9kpf7
Internal Server Error (500) for request POST /courses/session
Execution exception (In /app/models/Course.java around line 40)
IllegalStateException occured : org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: models.Session
play.exceptions.JavaExecutionException: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: models.Session
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:237)
at Invocation.HTTP Request(Play!)
Caused by: java.lang.IllegalStateException: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: models.Session
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1386)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1317)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1323)
at org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:965)
at play.db.jpa.JPABase._save(JPABase.java:41)
at play.db.jpa.GenericModel.save(GenericModel.java:215)
at models.Course.AddSession(Course.java:40)
at controllers.Courses.session(Courses.java:36)
at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:557)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:508)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:484)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:479)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:161)
... 1 more
Caused by: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: models.Session
at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:243)
at org.hibernate.type.EntityType.getIdentifier(EntityType.java:456)
at org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:121)
at org.hibernate.persister.collection.AbstractCollectionPersister.writeElement(AbstractCollectionPersister.java:815)
at org.hibernate.persister.collection.AbstractCollectionPersister.recreate(AbstractCollectionPersister.java:1203)
at org.hibernate.action.CollectionRecreateAction.execute(CollectionRecreateAction.java:58)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:265)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:188)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:345)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
at org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:962)
... 10 more
感嘆。異常的堆棧跟蹤是什麼?它代碼的哪一行是它的參考? –
更新了我的問題,並詢問了您要求提供的信息 – nupac
因此,this.sessions爲空。確保初始化它。向我們展示課程代碼。 –