gpt4 book ai didi

java - Hibernate注释一对多

转载 作者:行者123 更新时间:2023-11-29 23:19:20 26 4
gpt4 key购买 nike

我无法将任何记录添加到我的 WorkOrder 表中。它将记录添加到 Company 表和 Handyman 表中。可能是我的注释有问题。有没有错误?
我有 3 张 table 。
1 公司表,包含公司名称、地址、电话号码等
2 杂工表,杂工姓名、地址、小时费率等
3 WorkOrders,工单编号,作业现 field 址,

表 Company 和 WorkOrders 通过一对多关联中的外键链接表 Handyman 和 WorkOrders 通过一对多关联的外键链接

工作订单.java

@Entity
@Table(name="Work_orders", schema="handyman")
public class WorkOrder implements Serializable {

// id, Work_order, Address, Email, Comment, Date_received, Price,
Companys_list_id, Handymans_list_id

@ManyToOne
@JoinColumn(name="Companys_list_id", referencedColumnName="id")
private Company company;

@ManyToOne(optional=false)
@JoinColumn(name="Handymans_list_id", referencedColumnName="id")
private Handyman handyman;

公司.java

@Entity
@Table(name="Companys_list", schema="handyman")
public class Company implements Serializable {

@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="Companys_list_id")
private Set<WorkOrder> workOrders;

Handyman.java

@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="Handymans_list_id")
private Set<WorkOrder> workOrders;

这是我的 JSP 文件:

<s:form action="saveWorkOrder">

<s:actionerror/>
<s:textfield name="workOrder.workOrder" label="Work order number" />
<s:textfield name="workOrder.address" label="Adress/Location" />
<s:textfield name="workOrder.email" label="Email" />
<s:textfield name="workOrder.comment" label="Comment" />
<s:textfield name="workOrder.dateReceived" label="Date receved" />
<s:textfield name="workOrder.price" label="Price" />
<s:textfield name="company.companyName" label="Company name" />
<s:textfield name="handyman.handymanName" label="Handyman name" />
<s:submit value="Register" />

</s:form>

WorkOrderManagment.java

public String saveWorkOrder(WorkOrder workOrder) throws Exception
{

System.out.println("Saving work order...");
WorkOrderDaoHibernate dao = new WorkOrderDaoHibernate();
workOrder = dao.saveWorkOrder(workOrder);
return SUCCESS;

}

WorkOrderDaoHibernate.java

public WorkOrder saveWorkOrder(WorkOrder workOrder)
{
SessionFactory sf = HibernateUtil.getSessionFactory();
Session session = sf.openSession();
Transaction trans = session.beginTransaction();
Integer id = (Integer) session.save(workOrder);
trans.commit();
workOrder.setId(id);
session.close();
return workOrder;

}

最佳答案

由于公司和勤杂工 pojo 定义了与工单的一对多关系,并且还对所有人设置了级联,所以更好的解决方案是:1、创建公司对象,设置值和工单对象集合2. 创建勤杂工对象,设置值和工单对象集合3. 打开 session 并将 1 和 2 保存在单个批处理中。

关于java - Hibernate注释一对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27465454/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com