这是具有 @manytomany 映射的用户类,我希望它是单向的。
@Entity
@Getter
@Setter
@Table(name="users")
public class User implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToMany
@JoinTable(name="user_drivers", joinColumns=@JoinColumn(name="user_id"), inverseJoinColumns=@JoinColumn(name="driver_id"))
private Set<Driver> driverSet;
public User() {
}
}
使用用户和驱动程序的 key 创建了一个表,但我不知道如何在我的存储库中访问它。
@Query(value="select u.user_id from user_drivers")
List<?> findAllByIdAndDriver(Long id);
这会出现错误:无法解析符号“user_drivers”
@Query(value="select id,driverSet from User ")
List<?> findAllByIdAndDriver(Long id);
这会导致嵌套查询异常。
最佳答案
您的方法命名令人困惑。当您说诸如 findByIdAndSomethingElse
之类的内容时,您暗示您正在执行以下操作:
SELECT * FROM MY_TABLE WHERE ID = ? AND SOMETHING_ELSE = ?;
这里缺少信息,因为您没有共享完整的存储库或 Driver
实现,但假设您想要来自具有特定 ID 的 Driver
的所有用户 ID,你可以简单地这样做:
@Query("select driver.userId from Driver driver where driver.id = ?1")
public List<Long> findUserIdsByDriverId(long id);
?1
是第一个参数。您可以使用 ?2, ?3, ... , ?n
关于java - 如何访问jpa中的多对多表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60579951/