Hibernate @OneToOne 映射不加入列?

Posted

技术标签:

【中文标题】Hibernate @OneToOne 映射不加入列?【英文标题】:Hibernate @OneToOne Mapping not Join the column? 【发布时间】:2015-04-24 10:06:43 【问题描述】:

我是 Java Hibernate 的新手,使用 hibernate 注释从 mysql DB 中加入和获取列。我有两个表 Order_headers 表和 Branch 表。我有分支代码在 Order_headers 表中我有 branch_code,在分支表中我有 branch_code,branch_name,branch_desc。我想将 Branch 详细信息表列与 order_headers 表结合起来。

Order_headers.class

@Entity
@Table(name = "order_headers")
public class Order_headers 

@Column(name = "merchant_code")
private int merchant_code;

@Column(name = "device_id")
private String device_id;

@Id @GeneratedValue
@Column(name = "bill_number")
private int bill_number;

@Column(name = "order_number")
private String order_number;

@Column(name = "order_value")
private double order_value;

@Column(name = "payment_type")
private String payment_type;

@Column(name = "payment_status")
private String payment_status;

@Column(name = "order_datetime")
private Timestamp order_datetime;

//format YYYY-mm-dd
@Column(name = "order_date")
private String order_date;

//format HH:mm:ss
@Column(name = "order_time")
private String order_time;

@Column(name = "sub_total")
private double sub_total;

@Column(name = "VAT")
private double VAT;

@Column(name = "grand_total")
private double grand_total;

@Column(name = "branch_code")
private int branch_code;

@OneToOne(mappedBy = "order_headers", cascade=CascadeType.ALL)
@Fetch(FetchMode.JOIN)
private Branch branch;

@Column(name = "discount")
private double discount;

//Getter and setters 


分支

@Entity
@Table(name = "branch")
public class Branch 

@Id @GeneratedValue
@Column(name = "branch_code")
private int branch_code;

@Column(name = "branch_name")
private String branch_name;

@OneToOne
@JoinColumn(name = "branch_code")
private Order_headers order_headers;

//Getter and setters     


获取查询

ArrayList<Order_headers> order_details = (ArrayList<Order_headers>) session.createQuery("FROM Order_headers").list();

它只显示 order_headers 表中的数据。无法从 Branch 表中获取数据。帮我解决这个问题。

【问题讨论】:

您面临的问题是保存数据还是获取数据? @kondu 在获取数据时。 【参考方案1】:

父实体中的 mappedBy 应该引用您与父关联的子属性。将 parent 中的 mappedBy 属性更改如下。

@OneToOne(mappedBy = "order_headers", cascade=CascadeType.ALL)
private Branch branch;

【讨论】:

对不起,我只这样做。输入代码时,输​​入错误。 尝试删除对获取类型的明确提及。其他一切看起来都很好。或者使用@MapsId,以便您提及此类的主键正在映射到父级。 参考 [***.com/questions/4324839/…【参考方案2】:

试试这个

分支实体:

@OneToOne(cascade=CascadeType.ALL)  
@JoinColumn(name="branch_code")  
public Order_headers  getOrder_headers()  
  
    return order_headers ;
  

Order_header 实体:

 @OneToOne(cascade=CascadeType.ALL, mappedBy="order_headers")  
 public Branch  getBranch()  
  
    return branch;  
  

【讨论】:

它显示类似Could not determine type for: hibernate.dao.manager.Order_headers, at table: branch, for columns: [org.hibernate.mapping.Column(order_headers)] at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:336)的错误 请尝试更改属性的名称(遵循命名约定)。如我所见,错误可能是由于 order_headers 的非解析是属性名或类名造成的。

以上是关于Hibernate @OneToOne 映射不加入列?的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate @OneToOne 单向映射...级联删除

为啥在这个 Hibernate 映射中使用 @ManyToOne 而不是 @OneToOne?

hibernate/jpa double OneToOne 与一个实体的双向关系

如何处理 JPA @OneToOne 映射中的“孤立”行

外键中的 JPA / Hibernate OneToOne Null

休眠 @OneToOne 与 Principal REST 的映射