我想使用外鍵“ ”從 TT_CARS 表中MODEL_ID僅檢索一列“ MODEL_NAME”,我嘗試了以下代碼,該代碼有效,但它回傳了整個 CARS 物件。
@JoinColumn(name = "MODEL_ID", referencedColumnName = "ID")
@ManyToOne(fetch = FetchType.EAGER)
private CARS cars;
我也嘗試了下面的代碼,它也不起作用
@SecondaryTable(name = "TT_CARS", pkJoinColumns = @PrimaryKeyJoinColumn(name = "ID", referencedColumnName="MODEL_ID"))
MODEL_NAME有沒有其他方法可以使用hibernate和JPA來檢索列( )?
備注:modelName 應該是Options類的一部分。
我的代碼
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
@Entity
@Table(name = "TT_OPTIONS")
public class Options {
@Id
@Column(name = "ID")
private String id;
@NotNull
@Column(name = "DESCRIPTION", nullable = false)
private String description;
@Column(name = "MODEL_ID") // Foreign key
private Long modelId;
@Column(name = "MODEL_NAME", table = "TT_CARS") // this is the column name I would like to retrieve from the TT_CARS table
private String modelName;
// getters and setters
}
uj5u.com熱心網友回復:
您可以使用@Formula。它是可由自定義子查詢檢索的只讀計算列。它不存在于目標表中。
定義一個公式(派生值),它是一個 SQL 片段,在大多數情況下充當 @Column 替代項。表示只讀狀態。
例子:
@Entity
@Table(name = "TT_OPTIONS")
public class Options {
@Id
@Column(name = "ID")
private Long id;
@Column(name = "DESCRIPTION", nullable = false)
private String description;
@Column(name = "MODEL_ID")
private Long modelId;
@Formula("(select TT_CARS.MODEL_NAME from TT_CARS where TT_CARS.ID = MODEL_ID)")
private String modelNameFormula;
}
@Entity
@Table(name = "TT_CARS")
public class Cars {
@Id
@Column(name = "ID")
private Long id;
@Column(name = "MODEL_NAME")
private String modelName;
}
Hibernate 生成的本機查詢:
select
options0_.id as id1_4_0_,
options0_.description as descript2_4_0_,
options0_.model_id as model_id3_4_0_,
(select
TT_CARS.MODEL_NAME
from
TT_CARS
where
TT_CARS.ID = options0_.MODEL_ID) as formula1_0_
from
tt_options options0_
where
options0_.id=?
@SecondaryTable為@OneToOne 關系設計,將多個表映射到同一個物體。它不適用于@ManyToOne 關系。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/459052.html
