【发布时间】:2015-02-16 23:07:47
【问题描述】:
我一直在尝试将数据从 2 个不同的表中提取到 JPA 中的单个实体,但没有结果。
从两个不同的表中保存数据的实体如下:
@Data @Entity @JsonSnakeCase
public class WareHouse {
@Id
@GeneratedValue
private long id;
@Column(unique = true)
private String fcId;
@Enumerated(EnumType.STRING)
private FCStatus status;
@OneToMany(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER, mappedBy = "fcId")
private List<WorkingHours> workingHours;
@Enumerated(EnumType.STRING)
private IntegrationType integrationType;
}
另一个实体WorkingHours是:
@Data
@Entity
@JsonSnakeCase
public class WorkingHours {
@Id
@GeneratedValue
private long id;
private String fcId;
private LocalDate date;
private DateTime start;
private DateTime end;
}
WareHouse 和 WorkingHours 表具有一对多关系,fcId 是连接它们的列。
在我的用例中,我必须在上面定义的单个实体 WareHouse 中获取 WareHouse 详细信息及其 WorkingHours。我如何做到这一点?
命名查询(如下)仅获取WareHouse 数据,而WorkingHours 将变为空。数据模型错了吗?还是查询错误? (我认为 JPA 在给定注释 OneToMany 和 FetchType 等时会自动从相关表中获取数据。)
<named-query name="searchByFcId">
<query>
<![CDATA[
select f from WareHouse f where f.fcId = :fc_id
]]>
</query>
</named-query>
【问题讨论】:
-
看起来不错,但可能会因为您在
Warehouse实体和WorkingHours实体中都有fcId 而感到困惑,所以我猜真正的映射列不是fcId。检查你的真实数据库,看看 FK 是什么。 -
fcID 是数据库中的外键。
-
但是仓库的PK不是引用它的字段吗?
-
是的。引用的列不是 PK 而是唯一的受约束列。
-
对不起,我沟通不好。如果您查看 Warehouse 表,引用 WorkingHours 的列名是什么?
标签: java mysql jpa named-query