我正在使用Spring Data JPA。我有2个表,如下:
投资和投资type。投资与投资type之间存在一对一的关系。
我的投资课程如下:
@Entity
public class Investment {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int investmentId;
@NotNull(message = "Cannot be empty")
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "investment_type_id")
private InvestmentType investmentType;
@NotNull(message = "Cannot be empty")
private String investmentNumber;
//getter and setter methods
}
我的InvestmentType类如下:
@Entity
public class InvestmentType {
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Integer investmentTypeId;
private String investmentTypeName;
//getter and setter methods
}
我的投资重点如下:
public interface InvestmentRepository extends JpaRepository <Investment, Integer>{
}
我的控制器具有以下代码:
List<Investment> investments = investmentRepo.findAll();
for(Investment investment:investments){
logger.info(" Got investment with id "+investment.getInvestmentId());
if(investment.getInvestmentType() != null){
logger.info("Investment Type is "+investment.getInvestmentType().getInvestmentTypeName());
}
else{
logger.info("null investment type ");
}
}
但是,for循环总是输出"零投资类型"
因此,似乎Findall方法没有从InvestmentType表中检索数据映射的数据。
我做错了什么吗?我是否需要做一些明确的事情才能通过映射从关联表中检索数据?
一对一的关联是唯一一个无法代理的联想。add提取类型懒惰并在相关表柱上使用mappedby。
父表
@NotNull(message = "Cannot be empty")
@OneToOne(fetch = FetchType.LAZY, optional = false)
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "investment_type_id")
private InvestmentType investmentType;
相关表
@Id @GeneratedValue(strategy=GenerationType.AUTO)
@OneToOne(mappedBy = "investment")
private Integer investmentTypeId;