Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Playframework持久化多个对象_Java_Jpa_Many To Many_Playframework 2.1 - Fatal编程技术网

Java 使用Playframework持久化多个对象

Java 使用Playframework持久化多个对象,java,jpa,many-to-many,playframework-2.1,Java,Jpa,Many To Many,Playframework 2.1,我正在使用JavaPlayFramework2.1.1,并尝试创建一个表单来持久化具有多对多关系(学生和课程之间)的对象。在我看来,为了创建一个学生,我使用了multiselect元素来选择多个课程。提交表单后,将正确插入学生,但可合并的“学生课程”仍为空 下面是一些代码: Course.java @Entity public class Course extends Model { ... @ManyToMany(mappedBy = "courses", cascade=CascadeTy

我正在使用JavaPlayFramework2.1.1,并尝试创建一个表单来持久化具有多对多关系(学生和课程之间)的对象。在我看来,为了创建一个学生,我使用了multiselect元素来选择多个课程。提交表单后,将正确插入学生,但可合并的“学生课程”仍为空

下面是一些代码:

Course.java

@Entity
public class Course extends Model {
...

@ManyToMany(mappedBy = "courses", cascade=CascadeType.ALL)
private List<Student> students;

public static List<Course> find() {
    Query query = JPA.em().createQuery("SELECT e FROM course e");
    return (List<Course>) query.getResultList();
}
...
}
@实体
公共课扩展模式{
...
@许多(mappedBy=“courses”,cascade=CascadeType.ALL)
私人名单学生;
公共静态列表查找(){
Query Query=JPA.em().createQuery(“从课程e中选择e”);
return(List)query.getResultList();
}
...
}
Student.java

@Entity
public class Student extends Model {
    ...
@ManyToMany(cascade = CascadeType.ALL)
private List<Course> courses;
...
}
@实体
公共班级学生扩展模式{
...
@多个(级联=级联类型.ALL)
私人名单课程;
...
}
AdminController.java

public class Admin extends Controller {
final static Form<Student> studentForm = Form.form(Student.class);

@Transactional
public static Result newStudent(){
    List<Student> students= Student.find();
    return ok(createStudent.render(students,studentsForm));
}

@Transactional
public static Result submitStudent(){
    Form<Student> filledForm = studentForm.bindFromRequest();   
    if(filledForm.hasErrors()) {
        Logger.error("Submitted Form got errors");
        return badRequest();
    } else {
        Student student= filledForm.get();
        Student.save(student);
    }
    List<Student> students= Student.find();
    return ok(createStudent.render(students,studentForm));
}
...
}
公共类管理扩展控制器{
最终静态表单studentForm=Form.Form(Student.class);
@交易的
公共静态结果newStudent(){
List students=Student.find();
返回ok(createStudent.render(students,studentsForm));
}
@交易的
公共静态结果提交学生(){
Form filledForm=studentForm.bindFromRequest();
if(filledForm.hasErrors()){
Logger.error(“提交的表单出现错误”);
返回请求();
}否则{
Student=filledForm.get();
保存(学生);
}
List students=Student.find();
返回ok(createStudent.render(students,studentForm));
}
...
}
创建学生的表单:

@(students:List[Student], studentForm: Form[Student])

@import helper._

@main("Administration - Create Student"){
<h1>Create Student</h1>
<hr/>
}

<h2>New Student</h2>
@helper.form(action = routes.Admin.submitStudent) {
            ...
    @helper.select(studentForm("courses"),
    options(Course.options),
    'multiple -> "multiple",
    '_label -> "Course")

    <input type="submit" class="btn btn-success">
}

}
@(学生:列表[学生]、学生表格:表格[学生])
@导入助手_
@主(“管理-创建学生”){
创造学生

} 新生 @helper.form(action=routes.Admin.submitStudent){ ... @选择(学生表格(“课程”), 选项(当然,选项), '多个->“多个”, “_标签->课程”) } }

感谢您的帮助

我现在通过自己将值绑定到对象解决了这个问题

以下是来自我的Admincontroller的代码:

Student student = filledForm.get();
List<Student> courses= new LinkedList<Course>();
for(Map.Entry<String, String> entry : filledForm.data().entrySet()){
    if(entry.getKey().contains("courses")){
        Course c = Course.find(Long.parseLong(entry.getValue()));
        courses.add(c);
    }
}
student.setCourses(courses);
Student=filledForm.get();
列出课程=新建链接列表();
对于(Map.Entry:filledForm.data().entrySet()){
if(entry.getKey()包含(“课程”)){
Course c=Course.find(Long.parseLong(entry.getValue());
加入(c);
}
}
学生课程;

在使用filledForm.get()函数时,我仍在寻找一种更优雅的方法来实现这一点。

我猜问题是通过将发布的值绑定到对象来实现的。即使我只选择了一个课程,创建的学生对象也没有课程