Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 无法在hibernate中更新一对一关系的对象_Sql_Spring_Hibernate - Fatal编程技术网

Sql 无法在hibernate中更新一对一关系的对象

Sql 无法在hibernate中更新一对一关系的对象,sql,spring,hibernate,Sql,Spring,Hibernate,我的关系如下所示: @Entity @Table(name = "ORDER_", catalog = "smartorder") public class Order implements Serializable { /** * serial version id */ private static final long serialVersionUID = 13875615L; @Id @Column(name = "ORDE

我的关系如下所示:

    @Entity
@Table(name = "ORDER_", catalog = "smartorder")
public class Order implements Serializable {

    /**
     * serial version id
     */
    private static final long serialVersionUID = 13875615L;

    @Id
    @Column(name = "ORDER_ID", unique = true, nullable = false)
    @SequenceGenerator(name = "ORDER_ID_GEN", sequenceName = "ORDER_ID_SEQ")
    @GeneratedValue(generator = "ORDER_ID_GEN")
    private long orderId;

    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinColumn(name = "INVOICE_ID", referencedColumnName = "INVOICE_ID")
    private Invoice invoice;

    // setters and getters
}





@Entity
@Table(name = "INVOICE_")
public class Invoice implements Serializable {
    /**
     * serial version id
     */
    private static final long serialVersionUID = 13875612L;

    @Id
    @Column(name = "INVOICE_ID", unique = true, nullable = false)
    @SequenceGenerator(name = "INVOICE_ID_GEN", sequenceName = "INVOICE_ID_SEQ")
    @GeneratedValue(generator = "INVOICE_ID_GEN")
    private int invoiceId;

    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinColumn(name = "ORDER_ID", referencedColumnName = "ORDER_ID")
    private Order order;

    @Column(name = "SUB_TOTAL", precision = 6, nullable = false)
    private double subTotal;

    @Column(name = "SERVICE_TAX", precision = 6, nullable = false)
    private double serviceTax;

    @Column(name = "VAT", precision = 6, nullable = false)
    private double vat;

    @Column(name = "SURCHAARGE", precision = 6, nullable = false)
    private double surChaarge;

    @Column(name = "GRAND_TOTAL", precision = 6, nullable = false)
    private double grandTotal;


    //setters and getters
}
我能够正确地保存记录。但是,当我试图通过将invoice对象设置为order对象来更新orders对象时,order对象不是持久的,只有invoice对象是持久的

Order o = getSession().load(Order.class,1L);
o.setInvoice(new Invoice(.........));
getSession().update(o);
在控制台中,我只能看到一条SQL语句, 在发票中插入(折扣、总计、订单ID、舍入、服务税、小计、附加费、增值税)值(?,,,,,,,,,?)

发票Id未在订单表中获得更新:(

有人能提出问题是什么吗


提前感谢….

问题在于您使用实体/表和一对一映射样式的场景不正确。一对一的概念与您当前的表和实体设计不一致

请尝试在此处阅读更多关于一对一的内容:

在这里,您可以找到一对一映射的示例

如果您真的想继续进行一对一映射,您必须:

  • 从“发票”表中删除“发票ID”列(令人惊讶但却是事实)
  • 将“发票”表中的“订单ID”列作为主键(另一个事实)
  • 将发票实体的映射更改为更加顺从(由订单实体驱动)
  • 发票映射的更改示例:

    // just a draft, to give you idea about the 
    // "submissive" side mapping.
    // All the ID stuff of the Invoice is driven by its 
    // "Master" - Order
    @GenericGenerator(name = "generator", strategy = "foreign", 
    parameters = @Parameter(name = "property", value = "order"))
    @Id
    @GeneratedValue(generator = "generator")
    @Column(name = "ORDER_ID", unique = true, nullable = false)
    public Integer getOrderId() {
        return this.orderId;
    }
    
    public void setOrderId(Integer orderId) {
        this.orderId = orderId;
    }
    
    @OneToOne(fetch = FetchType.LAZY)
    @PrimaryKeyJoinColumn
    public Order getOrder() {
        return this.order;
    }
    

    请将其作为草稿,展示一对一概念的不同之处。

    这可能取决于您与众不同的设计

    使用ORDR_uu中的INVOICE_ID和INVOICE_u中的ORDER_uid,两个表可以同时作为彼此的父表和子表

    如果数据库使用外键,则删除和插入将很困难

    您应该使用一个类型/表作为父级(例如,订单,因为它通常是第一个),另一个作为子级(订单id将在发票表中)


    在你的对象模型中,你可以有两个方向(见第一个例子)

    谢谢@Radim,我是根据你的评论计算出来的。现在它可以工作了:)很高兴看到这一点。祝你冬眠好运。。。神奇的工具;)是的,你说的是对的。但我也尝试了单向,但并没有解决这个问题。不管怎样,我都像《贝娄邮报》中的“拉迪姆·克勒”所说的那样尝试过。感谢您的回复:)