简体   繁体   中英

Hibernate annotations one-to-many

I can't add any records to my WorkOrder table. It adds records to Company table and Handyman table. Probably something wrong with my annotations. Is there any mistakes?
I have 3 tables.
1 Company table, contains names of companies, addresses, phone numbers, etc.
2 Handyman table, handyman name, address, hourly rate, etc.
3 WorkOrders, work order number, job site address,

Tables Company and WorkOrders are linked through a foreign key in one-to-many association Tables Handyman and WorkOrders are linked through a foreign key in one-to-many association

WorkOrder.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;

Company.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;

Here's my JSP file:

<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;

}

由于公司和杂工pojos定义了与工单的一对多关系,并且还对所有工种进行了级联设置,因此更好的解决方案是:1.创建公司的对象,设置值和工单对象的集合2.创建杂工的对象,设置值和工作订单对象的集合。3.打开会话并将1和2批量保存。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM