Except for the Dept_Id parameter, your form inputs do not match your controller parameters, so Play can't bind them. You have to make them match. For example if in your view you use courseName, in your controller you also have to use courseName.
It's also very important that you respect Java naming conventions. It will save you from many headaches in the future.
I have rewritten your code below with better naming :
Model :
public class Course extends Model {
public String courseName;
public String courseCode;
@Lob
public String courseDescription;
@ManyToOne
public Department department;
@OneToMany
public List<Session> sessions;
public Course(String courseName, String courseCode, String courseDescription, Department department){
this.courseName = courseName;
this.courseCode = courseCode;
this.courseDescription = courseDescription;
this.department = department;
}
Then the form :
#{form @Courses.save(), id:'createUser'}
<div>
Course Name: <input type="text" name="courseName" />
</div>
<div>
Course Code: <input type="text" name="courseCode" />
</div>
<div>
Course Description: <textarea name="courseDescription" form="createUser"></textarea>
</div>
<div>
Department Id:<input type = "text" name = "departmentId" />
</div>
<div>
<input type="submit" value="Create Course" />
</div>
#{/form}
Then the controller :
public static void save(String courseName, String courseCode, String courseDescription, Long departmentId){
Department department = Department.findById(departmentId);
Course course = new Course(courseName, courseCode, courseDescription, department);
course.save();
department.addCourse(course);
department.save();
index();
}