java - 如何访问jpa中的多对多表?

标签 java spring postgresql hibernate jpa

这是具有 @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/

相关文章:

java - 如何让 GWT 在链接文件夹中找到源代码?

spring - 如何配置spring HandlerExceptionResolver来处理jsp中抛出的NullPointerException?

java - 在Hibernate中生成非冲突非主键唯一 "composite ids"

json - 从 postgresql 返回不同的数据类型

sql - 需要帮助编写 SQL 触发器

没有 Rails 的 Ruby/Postgres ActiveRecord : Undefined Table ERROR: relation "..." does not exist

java - 泛型类型删除 ClassCastException

java - 在 Windows 服务器上的 IIS 上部署 Java/JSP/Struts 2 Web 应用程序

java - 在 Spring 框架中分层或覆盖 ActiveProfiles

java - google-api-translate-java 检索翻译时出错