gpt4 book ai didi

java - 如何在 JPQL 中创建使用隐式联接查询两个表的 TypedQuery?

转载 作者:行者123 更新时间:2023-11-30 05:43:07 25 4
gpt4 key购买 nike

我正在尝试学习如何在 JPQL 中使用隐式联接。我正在使用的一个示例似乎表明可以将外键引用为路径,然后可以访问外键引用的表中的属性。

用户和报表之间是 1:M 的强制关系。userId 是引用 User 的外键。

我已检查是否导入了正确的库,是否具有正确的映射(@JoinColumn、@ManyToOne、@OneToMany、mappedBy 等),一切似乎都正常。

@GET
@Path("findByTotalCalBurnedAndHeight/{height}/{totalCalBurned}")
@Produces({"application/json"})
public List<Report> findByTotalCalBurnedAndHeight(@PathParam("height") Integer height, @PathParam("totalCalBurned") Integer totalCalBurned) {
TypedQuery<Report> q = em.createQuery("SELECT r FROM Report r WHERE r.totalCalBurned = :totalCalBurned AND r.userId.height = :height", Report.class);
q.setParameter("height", height);
q.setParameter("totalCalBurned", totalCalBurned);
return q.getResultList();
}

如上所示,我尝试使用以下方式访问“User”表中的“height”属性:r.UserId.height

根据我正在使用的示例,我希望联接能够在这里工作,但是我得到的结果是这个错误:“状态字段路径 'r.userId.height' 无法解析为有效的类型。”

我在这里遗漏了什么吗?非常感谢任何反馈。

更新以显示映射:

在报告类中:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "REPORT_ID")
private Integer reportId;

@JoinColumn(name = "USER_ID", referencedColumnName = "USER_ID")
@ManyToOne(optional = false)
@Basic(optional = false)
@NotNull
@Column(name = "USER_ID")
private Integer userId;

在用户类中:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "USER_ID")
private Integer userId;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "userId")

@Basic(optional = false)
@NotNull
@Column(name = "HEIGHT")
private int height;

最佳答案

问题出在这部分:

r.userId.height

为了使其正常工作,userId 必须是一个实体。您可以在Report中定义与user字段的关系,并编写如下内容:

"SELECT r FROM Report r left join r.user u WHERE r.totalCalBurned = :totalCalBurned AND u.height = :height"

编辑 - 更改此:

@JoinColumn(name = "USER_ID", referencedColumnName = "USER_ID")
@ManyToOne(optional = false)
@Basic(optional = false)
@NotNull
@Column(name = "USER_ID")
private Integer userId;

进入:

@JoinColumn(name = "USER_ID")
@ManyToOne(optional = false)
@Basic(optional = false)
@NotNull
private User user;

关于java - 如何在 JPQL 中创建使用隐式联接查询两个表的 TypedQuery?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55324694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com