Java Hibernate,Mysql-OneTONE映射不工作

Java Hibernate,Mysql-OneTONE映射不工作,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我有两个名为PurchaseDetails和PurchaseDetails的表,我正在尝试进行一对一的映射,同时尝试插入值,而不是插入第二个表(即,PurchaseDetails),而是完美地插入到PurchaseDetails表中 谁能帮我一下吗 @Entity @Table(name="Purchase") public class Purchase implements Serializable { @Id @GeneratedValue private

我有两个名为PurchaseDetails和PurchaseDetails的表,我正在尝试进行一对一的映射,同时尝试插入值,而不是插入第二个表(即,PurchaseDetails),而是完美地插入到PurchaseDetails表中

谁能帮我一下吗

@Entity
@Table(name="Purchase")
public class Purchase implements Serializable {
     @Id
      @GeneratedValue
      private Integer order_no;
     private String order_date;
     private String sales_person;
     private String ship_via;
     private String ship_from;
     private String ship_to;
     private String total;
     private String tax_amt;
     private String grand_total;

     @Transient 
     private PurchaseDetails purchaseDetails;


     @OneToOne(fetch = FetchType.LAZY, mappedBy = "Purchase", cascade = CascadeType.ALL) 
    public PurchaseDetails getPurchaseDetails() {
        return purchaseDetails;
    }
    public void setPurchaseDetails(PurchaseDetails purchaseDetails) {
        this.purchaseDetails = purchaseDetails;
    }
    Getters and Setters.
}
表-采购详情:

@Entity
@Table(name="purchase_details")
public class PurchaseDetails implements Serializable {
     @Id
      @GeneratedValue

      private Integer order_no;
     private Integer item_no;
     private String item_name;
     private String quantity;
     private String unit;
     private String unit_price;
     private String line_total;

     @OneToOne(fetch = FetchType.LAZY)
     @PrimaryKeyJoinColumn
     private Purchase purchase;

    public Purchase getPurchase() {
        return purchase;
    }
    public void setPurchase(Purchase purchase) {
        this.purchase = purchase;
}
Getters and Setters.
} 
插入值:

Purchase purc=new Purchase();
                        purc.setShip_from(purchase.getShip_from());
                        purc.setGrand_total("11");
                        purc.setOrder_date(purchase.getOrder_date());
                        purc.setOrder_no(purchase.getOrder_no());
                        purc.setSales_person(purchase.getSales_person());
                        purc.setShip_via(purchase.getShip_via());
                        purc.setTax_amt("123");
                        purc.setShip_to(purchase.getShip_to());
                        purc.setTotal("1234");

                        PurchaseDetails podetail= new PurchaseDetails();
                        podetail.setItem_name(podetails.getItem_name());
                        podetail.setItem_no(podetails.getItem_no());
                        podetail.setLine_total(podetails.getLine_total());
                        podetail.setOrder_no(podetails.getOrder_no());
                        podetail.setQuantity(podetails.getQuantity());
                        podetail.setUnit(podetails.getUnit());
                        podetail.setUnit_price(podetails.getUnit_price());
                        purc.setPurchaseDetails(podetail);
                        podetail.setPurchase(purc);

                      em.merge(purc);
                      entr.commit();

有谁能帮我解决这个问题。

首先,在字段和getter上有JPA注释。这是一个或另一个,但不是两个都有。Hibernate查找注释
@Id
所在的位置,并忽略不在同一位置的所有注释。因此,在您的示例中,
OneToOne
注释被忽略,因为它位于getter上,而Id注释位于字段上

不可忽略的是放置在
purchaseDetails
字段上的注释
@Transient
。但是
@Transient
意味着:这个字段不应该被持久化。所以事实并非如此


为了重述,请删除临时注释,并将OneTONE注释放在字段
purchaseDetails
上,而不是放在其getter上。

谢谢Nizet,我做了更改,但现在出现以下错误:更改
@OneTONE(fetch=FetchType.LAZY,mappedBy=“Purchase”,cascade=CascadeType.ALL)私有PurchaseDetails PurchaseDetails;
Error:org.krams.domain.Purchase.purchaseDetails中的未知映射,引用属性未知:org.krams.domain.purchaseDetails.Purchase字段名称为
Purchase
,而不是
Purchase
。因此它必须是
mappedBy=“purchase”
。Java是区分大小写的。谢谢,忘了注意那个打字错误。