uiiooo 2017-07-16 16:03 采纳率: 33.3%
浏览 1859
已结题

hibernate一对多级联保存问题

这是两个类
这是一端

 @Entity
public class Payroll implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column private long pid;

    @Column private long sid;
    //结账日期
    @Column private Timestamp date;
    //累结
    @Column private double totalSum;
    //结余
    @Column private double balance;
    //伙食费用
    @Column private double boardWages;
    //扣款
    @Column private double deduct;
    //欠款
    @Column private double debt;
    ///预支
    @Column private double advance;
    //薪水细则
    @OneToMany(mappedBy="payroll",cascade = CascadeType.ALL, fetch = FetchType.LAZY)  
    @Column private List<PayrollRow> payrollRow;

    public long getSid() {
        return sid;
    }
    public void setSid(int sid) {
        this.sid = sid;
    }
    public double getTotalSum() {
        return totalSum;
    }
    public void setTotalSum(double totalSum) {
        this.totalSum = totalSum;
    }
    public double getBalance() {
        return balance;
    }
    public void setBalance(double balance) {
        this.balance = balance;
    }
    public double getBoardWages() {
        return boardWages;
    }
    public void setBoardWages(double boardWages) {
        this.boardWages = boardWages;
    }
    public double getDeduct() {
        return deduct;
    }
    public void setDeduct(double deduct) {
        this.deduct = deduct;
    }
    public double getDebt() {
        return debt;
    }
    public void setDebt(double debt) {
        this.debt = debt;
    }
    public double getAdvance() {
        return advance;
    }
    public void setAdvance(double advance) {
        this.advance = advance;
    }
    public Timestamp getDate() {
        return date;
    }
    public void setDate(Timestamp date) {
        this.date = date;
    }
    public long getPid() {
        return pid;
    }
    public void setPid(long pid) {
        this.pid = pid;
    }
    public List<PayrollRow> getPayrollRow() {
        return payrollRow;
    }

    public void setPayrollRow(List<PayrollRow> payrollRow) {
        this.payrollRow = payrollRow;
    }
    public void setSid(long sid) {
        this.sid = sid;
    }

}

这是多端

 @Entity
@Table(name = "payroll_row")
public class PayrollRow implements Serializable{


    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    @Id
    @Column private long prid;
    @Column(name="style_number") private String styleNo;
    @Column private String process;
    @Column private int count;
    @Column private double cost;
    @Column private double amount;
    @ManyToOne(cascade=CascadeType.REFRESH,optional=false,fetch = FetchType.LAZY)  
    @JoinColumn(name="pid")  
    private Payroll payroll;

    public Payroll getPayroll() {
        return payroll;
    }
    public void setPayroll(Payroll payroll) {
        this.payroll = payroll;
    }
    public String getStyleNo() {
        return styleNo;
    }
    public void setStyleNo(String styleNo) {
        this.styleNo = styleNo;
    }
    public String getProcess() {
        return process;
    }
    public void setProcess(String process) {
        this.process = process;
    }
    public int getCount() {
        return count;
    }
    public void setCount(int count) {
        this.count = count;
    }
    public double getCost() {
        return cost;
    }
    public void setCost(double cost) {
        this.cost = cost;
    }
    public double getAmount() {
        return amount;
    }
    public void setAmount(double amount) {
        this.amount = amount;
    }
    public long getPrid() {
        return prid;
    }
    public void setPrid(long prid) {
        this.prid = prid;
    }



}

一开始将PayrollRow的list赋值给Payroll一端只保存一端失败
后来把PayrollRow里面的Payroll进行赋值 两者关联起来 结果还是只保存了Payroll的数据 请问何解 还有我如果想只通过一端保存来保存两个表的信息该怎么做 谢谢

按一楼修改后执行如下语句

 payroll.setPid(30);
        List<PayrollRow> pwl = payroll.getPayrollRow();
        for (int i = 0;i<pwl.size();i++) {
            pwl.get(i).setPayroll(payroll);

        }
        payroll.setPayrollRow(pwl);
        payrollService.save(payroll);

结果控制台输出的sql语句没有insert
只有这
Hibernate:
select
payrollrow_.prid,
payrollrow_.amount as amount2_5_,
payrollrow_.cost as cost3_5_,
payrollrow_.count as count4_5_,
payrollrow_.payroll_id as payroll_7_5_,
payrollrow_.process as process5_5_,
payrollrow_.style_number as style_nu6_5_
from
payrollrow payrollrow_
where
payrollrow_.prid=?

  • 写回答

2条回答

  • 为梦想增值 2017-07-17 01:23
    关注

    Payroll p=new Payroll ();

    p.setSid(xxx);

    .

    .

    .



    List pw=p.getPayrollRow();

    pw.setCount(xxx);

    .

    .

    .

    p.setPayrollRow(pw);

                最后再把Payroll提交保存。
    


    最后把 @ManyToOne(cascade=CascadeType.REFRESH,optional=false,fetch = FetchType.LAZY)

                改成   @ManyToOne(cascade=CascadeType.ALL,optional=false,fetch = FetchType.LAZY)
    
    评论

报告相同问题?

悬赏问题

  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?
  • ¥15 cgictest.cgi文件无法访问
  • ¥20 删除和修改功能无法调用
  • ¥15 kafka topic 所有分副本数修改
  • ¥15 小程序中fit格式等运动数据文件怎样实现可视化?(包含心率信息))
  • ¥15 如何利用mmdetection3d中的get_flops.py文件计算fcos3d方法的flops?
  • ¥40 串口调试助手打开串口后,keil5的代码就停止了
  • ¥15 电脑最近经常蓝屏,求大家看看哪的问题
  • ¥60 高价有偿求java辅导。工程量较大,价格你定,联系确定辅导后将采纳你的答案。希望能给出完整详细代码,并能解释回答我关于代码的疑问疑问,代码要求如下,联系我会发文档