hibernate - 使用桥接表时的 HQL 查询?
问题描述
我正在使用桥接表而不创建中间桥接类。地址有一个addressStatus
字段。我正在尝试使用 addressStatus 查询用户 > UserAddressBridge > 地址。
@Table(name = "user")
public class User {
..
@ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.DETACH})
@JoinTable(
name = "user_address",
joinColumns = { @JoinColumn(name = "user_id")},
inverseJoinColumns = { @JoinColumn(name = "address_id")}
)
@JsonIgnore
private final List<Address> addresses = new ArrayList<Address>();
@ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.DETACH})
@JoinTable(
name = "reports",
joinColumns = { @JoinColumn(name = "user_id")},
inverseJoinColumns = { @JoinColumn(name = "reports_id")}
)
@JsonIgnore
private final List<Reports> reports = new ArrayList<Reports>();
}
我无法弄清楚如何编写 JPA 查询以使用桥接类,因为它不是物理实体对象。这就是我试图在用户地址是传递的 Id 的地方拉用户的方式。但是,由于我们使用上述语法“导航”到中间桥表 - 我如何编写 JPA 查询?还是我别无选择,只能求助于本机查询?
公共接口 UserRepository 扩展 PagingAndSortingRepository<User, Long> {
@Query(value = "SELECT user FROM User address, <<UserAddress address>> WHERE address.addressId = :addressId")
public Page<User> findCasesByStatus(Pageable pageable, @Param("addressId") Long addressId);
}
*** 编辑:感谢您的建议。这很有效 **** 我只需要使用 JPA 来正确构造我的方法名称,如下所示。_ 很重要。
public AddressRepository extends CrudRepository<Address, Long> {
public Page<User> findByAddresses_AddressStatus(Pageable pageable
Byte addressStatus);
}
解决方案
您不需要定义查询。spring-data-jpa
可以根据方法名称自动生成它。
public interface UserRepository
extends PagingAndSortingRepository<User, Long> {
public Page<User> findByAddressesAddressId(Long addressId,
Pageable pageable);
}
推荐阅读
- sql - SQL Server - 通过从分隔符中识别来拆分多行的列值
- node.js - 记录所有错误和警告
- c++ - 在 C++ 中将大量图像保存在 RAM 中的最佳方法
- python - 按另一个列表的顺序对python列表进行排序并检索旧索引
- r - 如何在闪亮的应用程序中添加滚动条和十字按钮以弹出窗口?
- javascript - 基于自动分号插入 JS 规则的有趣错误。需要说明
- r - R函数用于识别另一列中的值?
- python - 在 Windows 上加载的内核驱动程序版本
- excel - 如何计算 24 小时格式的固定时间范围内的时间值?
- material-ui - 使用 Hooks API 和 Enzyme 浅层渲染测试 Material UI 组件