Java Hibernate,Mysql-OneTONE映射不工作
我有两个名为PurchaseDetails和PurchaseDetails的表,我正在尝试进行一对一的映射,同时尝试插入值,而不是插入第二个表(即,PurchaseDetails),而是完美地插入到PurchaseDetails表中 谁能帮我一下吗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
@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是区分大小写的。谢谢,忘了注意那个打字错误。