【发布时间】:2014-11-15 11:08:55
【问题描述】:
我正在使用 play2.2.1 并尝试在 Jobads 和 JobCategory 模型之间创建多对多关系。
我的Jobads.java
package models;
@Entity
public class Jobads extends Model {
@Id
public Long id;
@ManyToOne
public Employers employer;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "jobads_jobcategories")
public List<Jobcategories> jobcategory;
@ManyToOne
public Joblocations joblocations;
@Required
public String jobtype;
@Required
public String title;
@Required
public String text;
@Required
public Long salary;
@Required
public String experience;
@Required
public String active;
@Formats.DateTime(pattern="yyyy-MM-dd hh:mm:yy")
public Date created_time = new Date();
@Formats.DateTime(pattern="yyyy-MM-dd hh:mm:yy")
public Date modified_time ;
@Required
@Formats.DateTime(pattern="yyyy-MM-dd")
public Date expire_date ;
public static Finder<Long,Jobads> find = new Finder<Long,Jobads>(
Long.class, Jobads.class
);
public static Jobads create(Jobads ja) {
ja.save();
ja.saveManyToManyAssociations("jobcategory");
return ja;
}
}
我的看法:
<form action="@routes.JobAdController.save()" method="post" onsubmit="return checkEmpty();">
<div class="row">
<div class="col-md-6">
<div class="block">
<div class="header">
<h2>Create A New Job</h2>
</div>
<div class="content controls">
<div class="form-row">
<div class="col-md-3">Employer</div>
<div class="col-md-9">
<select class="form-control" name="employer.id" id="employer_id">
<option value="select">Select Employer</option>
@for(emp<-employersList) {
<option value="@emp.id">@emp.company_name</option>
}
</select>
</div>
</div>
<div class="form-row">
<div class="col-md-3">Category</div>
<div class="col-md-9">
<select class="form-control" name="jobcategory.id" id="jobcategory_id">
<option value="select">Select Job Category</option>
@for(jc<-jobcategoryList) {
<option value="@jc.id">@jc.name</option>
}
</select>
</div>
</div>
<div class="form-row">
<div class="col-md-3">Location</div>
<div class="col-md-9">
<select class="form-control" name="joblocations.id" id="joblocation_id">
<option value="select">Select Job Location</option>
@for(jl<-joblocationList) {
<option value="@jl.id">@jl.country,@jl.state,@jl.city</option>
}
</select>
</div>
</div>
<div class="form-row">
<div class="col-md-3">Job Type</div>
<div class="col-md-9">
<select class="form-control" name="jobtype" id="jobtype">
<option value="select">Select Job Type</option>
<option value="parttime">Part Time</option>
<option value="fulltime">Full Time</option>
</select>
</div>
</div>
<div class="form-row">
<div class="col-md-3">Title</div>
<div class="col-md-9"><input type="text" class="form-control" placeholder="Title" name="title" required="required"/></div>
</div>
<div class="form-row">
<div class="col-md-3">Text</div>
<div class="col-md-9"><textarea class="form-control" name="text" required="required"></textarea></div>
</div>
<div class="form-row">
<div class="col-md-3">salary</div>
<div class="col-md-9"><input type="text" class="form-control" placeholder="Salary per month" name="salary" required="required"/></div>
</div>
<div class="form-row">
<div class="col-md-3">expire date</div>
<div class="col-md-9"><input type="date" class="form-control" placeholder="expiry date" name="expire_date" id="expire_date" required="required" /></div>
<input type="hidden" class="form-control" placeholder="expiry date" name="exp_date" id="exp_date" />
</div>
<div class="form-row">
<div class="col-md-3">Active</div>
<div class="col-md-9">
<select class="form-control" name="active" id="active">
<option value="active">Active</option>
<option value="inactive">Inactive</option>
</select>
</div>
</div>
<div class="form-row">
<div class="col-md-12">
<button type="submit" class="btn btn-default btn-block">Add</button>
</div>
</div>
</div>
</div>
</div>
</div>
</form>
还有我的控制器:
public class JobAdController extends Controller {
public static Result save() {
Form<Jobads> jobadsFormData = jobadsForm.bindFromRequest();
if (jobadsFormData.hasErrors()) {
System.out.println("Error in form");
return badRequest();
} else {
Jobads.create(jobadsFormData.get());
return redirect(controllers.routes.JobAdController.index());
}
}
}
我在 Jobcategory 模型中没有 Jobads 的变量,因为我不需要它。因此会创建一个名为 jobads_jobcategories 的默认表。我的问题是,当我尝试在 jobads 表中插入数据时,它已完美插入,但映射 ID 未保存在 jobads_jobcategories 表中。
【问题讨论】:
-
您是否尝试过将字段访问权限更改为“私有”并添加 getter 和 setter?
-
@rtruszk 按照您的建议尝试了,但仍然是同样的问题
-
我试图重现您的问题,但它对我有用。请在您的帖子中添加更多代码。在您创建工作和类别的位置添加代码。
-
@rtruszk 更新了我的问题,你能发布你的代码吗?它会很有帮助
标签: playframework many-to-many ebean