Jpa playframework-使用crud模块的多对多和额外列
假设我有一个employeee类和一个project类,我想在其中为一个项目分配多个(多个select)员工,并且在联接表中有额外的列“notified”,我尝试了显示的方法,但不适用于我 这是我的课程(我非常确定的课程) Employee.javaJpa 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
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);
}
}