我有一个类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个表:
- backtest_result
- backtest_result_series
- 回溯测试图_数据点
但我希望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)