Hibernate:如何将"has-a"子类的类映射到单个表?



我有一个类BacktestResult,它包含一个属性BacktestInputs。我希望hibernate创建一个包含两者内容的表。到目前为止,我拥有的是:

@Entity
@Table(name="backtest_result")
public class BacktestResult {
@Id
Long backtest_id;

public int userId;
BacktestInputs inputs;

@OneToMany
@OrderColumn(name="backtest_id")
public BacktestChartDataPoint[] series;
//getters and setters

BacktestChartDataPoint类如下所示:

@Entity
@Table(name="backtestchart_datapoint")
public class BacktestChartDataPoint {
@Id
public Long id;
public Long backtest_id;

@ManyToOne
@JoinColumn(name="backtest_id", nullable=false, insertable=false, updatable=false)
private BacktestResult backtestResult;

BacktestInputs类如下所示:

public class BacktestInputs {
public String strategy_name;
public String version;
etc...

只要我注释掉BacktestResult中的BacktestInputs,hibernate就会正确地创建3个表:

  1. backtest_result
  2. backtest_result_series
  3. 回溯测试图_数据点

但我希望BacktestInputs的内容包含在BacktestResult表中。如果我取消注释,则会出现错误:

无法确定的类型:net.tekknow.moneymachine.model.BacktestInputs,见表:backtest_result,用于列:[org.hibernate.mapping.Column(inputs(]

处理类层次结构的正确方法是什么;has-a";关系,NOT";is-a";关系?

您需要用@Embeddable注释类BacktestInputs(参见https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#embeddables)

最新更新