【问题标题】:Hibernate annotations one-to-manyHibernate 一对多注解
【发布时间】:2014-12-14 01:27:36
【问题描述】:

我无法将任何记录添加到我的 WorkOrder 表中。它将记录添加到 Company 表和 Handyman 表。我的注释可能有问题。有错误吗?
我有 3 张桌子。
1 公司表,包含公司名称、地址、电话号码等。
2 杂工表、杂工姓名、地址、时薪等
3 WorkOrders,工单号,工地地址,

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

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;

公司.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;

}

【问题讨论】:

    标签: java mysql hibernate jpa annotations


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2014-06-02
      • 2012-03-22
      • 2013-01-13
      • 2016-05-07
      • 2015-08-20
      • 1970-01-01
      • 2012-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多