3
回答
jpa 多对一关系 前台jsp怎么写,
【腾讯云】校园拼团福利,1核2G服务器10元/月!>>>   

-------联系人和 客户 是 一对多 的关系

/**

 *联系人实体
 */
@Entity
@Table(name = "crm_contact")
public class Contact extends IdEntity {

   @ManyToOne(targetEntity = Customer.class, cascade = { CascadeType.ALL })
   @JoinColumn(name = "customer_id")
   public Customer getCustomer() {
       return customer;
   }
}

下面是我写的 联系人 表单页面 中 客户选择部分:

<select id="contact_customer" name="contact.customer.id" class="form-control">
<c:forEach items="${customers}" var="customer">
<option value="${customer.id}">${customer.name}</option>
</c:forEach>
</select>

进入 联系人页面前 的controller 的方法如下:

@RequestMapping(value = "create", method = RequestMethod.GET)
public String createForm(Model model, ServletRequest request) {
List<Customer> customers = new ArrayList<Customer>();
customers = customerService.getAllCustomer(searchParams);
model.addAttribute("customers", customers);
model.addAttribute("contact", new Contact());
model.addAttribute("action", "create");
return "contact/contactForm";
}
提交保存 执行的方法:

@RequestMapping(value = "create", method = RequestMethod.POST)
public String create(Contact newContact, RedirectAttributes redirectAttributes) {
contactService.saveContact(newContact);
redirectAttributes.addFlashAttribute("message", newContact.getName() + "创建成功!");
return "redirect:/contact/create";
}
联系人表单页面上 ,比如姓名 可以直接 这样写<input type="text" id="contact_name" name="name" class="form-control"/>

请问 联系人 所属的客户 怎么写才能在提交表单时 把联系人的客户的ID提交上去,下面写的 name="contact.customer.id" 不行。。。。。。。。。。。。

<select id="contact_customer" name="contact.customer.id" class="form-control">
<c:forEach items="${customers}" var="customer">
<option value="${customer.id}">${customer.name}</option>
</c:forEach>
</select>

<无标签>
举报
岽茗
发帖于3年前 3回/210阅
共有3个答案 最后回答: 3年前

刚发现了,前台写错了,正确的是 <select id="contact_customer" name="customer.id"

但在保存时 ,提示“detached entity passed to persist”,大概意思我知道。是这个 客户customer已经存在了。

联系人 contact 和 客户customer 是多对一关系,

我把原来的@ManyToOne(targetEntity = Customer.class, cascade = { CascadeType.ALL})

改成@ManyToOne(targetEntity = Customer.class, cascade = { CascadeType.MERGE })就成成功保存联系人Contact了,但还是有些迷惑。。。CascadeType的级联问题。


@ManyToOne(targetEntity = Customer.class, cascade = { CascadeType.MERGE })
@JoinColumn(name = "customer_id")
public Customer getCustomer() {
return customer;
}

顶部