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
Jpa playframework-使用crud模块的多对多和额外列_Jpa_Playframework 1.x - Fatal编程技术网

Jpa playframework-使用crud模块的多对多和额外列

Jpa playframework-使用crud模块的多对多和额外列,jpa,playframework-1.x,Jpa,Playframework 1.x,假设我有一个employeee类和一个project类,我想在其中为一个项目分配多个(多个select)员工,并且在联接表中有额外的列“notified”,我尝试了显示的方法,但不适用于我 这是我的课程(我非常确定的课程) Employee.java class Employee extends Model{ //Some properties ..... } Project.class class Project extends Model{ //Some prope

假设我有一个employeee类和一个project类,我想在其中为一个项目分配多个(多个select)员工,并且在联接表中有额外的列“notified”,我尝试了显示的方法,但不适用于我

这是我的课程(我非常确定的课程)

Employee.java

class Employee extends Model{
    //Some properties
  .....
 }
Project.class

 class Project extends Model{
    //Some properties
    ......

    @ManyToMany
    public List<Employee> assignedEmp;
 }
类项目扩展模型{
//一些性质
......
@许多
公开名单分配表;
}
我正在使用playframework 1.2.5.3和crud模块

crud模块能从盒子里找到它吗

非常感谢您的帮助。
我完全迷路了。

在游戏框架中解决您的问题并不容易,但通过一些工作是可能的。
首先,您应该使用所需的附加属性和从员工和项目ID生成的复合ID键定义JoinModel。 CRUD不喜欢复合键,那么您应该覆盖此模型的
\u key()
findById()
方法。 最后,您需要覆盖此模型的crud控制器中的
show()
方法

@Entity
public class Project extends Model {
    public String name;

    @OneToMany(mappedBy = "project")
    public List<ProjectEmployee> projectEmployees = new ArrayList<ProjectEmployee>();

    @Override
    public String toString() {
      return name;
    }
}


@Entity
public class Employee extends Model {
    public String name;

    @OneToMany(mappedBy = "employee")
    public List<ProjectEmployee> projectEmployees = new ArrayList<ProjectEmployee>();

    @Override
    public String toString() {
      return name;
    }
}

@Entity
    @Table(name = "project_employee")
    public class ProjectEmployee extends GenericModel {


    @Id
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "project_id", insertable = false, updatable = false)
    public Project project;

    @Id
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "employee_id", insertable = false, updatable = false)
    public Employee employee;

    public boolean notified = false;

    public String _key() {
        try {
            return project.id + "-" + employee.id;
        } catch (NullPointerException npe) {
            return "0-0";
        }
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder("ProjectEmployee[");
        if (project != null) sb.append(project.name).append("-");
        if (employee != null) sb.append(employee.name);
        sb.append("]");
        return sb.toString();
    }

    public static ProjectEmployee findById(String id) {
        String[] elements = id.split("-");
        int projectId = Integer.valueOf(elements[0]);
        int employeeId = Integer.valueOf(elements[1]);

        return ProjectEmployee.find("project_id=? AND employee_id=?", projectId, employeeId).first();
    }
}
工作示例存储库

@CRUD.For(ProjectEmployee.class)
public class ProjectEmployees extends CRUD {

/**
 * CRUD show method doesn't know how to handle composite ids.
 *
 * @param id composite of ssn + "-" + accountId
 * @throws Exception
 */
public static void show(String id) throws Exception {
    // Do not rename 'type' or 'object'
    ObjectType type = ObjectType.get(getControllerClass());
    notFoundIfNull(type);
    ProjectEmployee object = ProjectEmployee.findById(id);
    notFoundIfNull(object);
    render("CRUD/show.html", type, object);
}


}