java - Hibernate 连接表限制

标签 java hibernate

我有以下表格:

[表:第 1 列,第 2 列]

A : id, name

B : id, name

AB : idA, idB

AB 是一个连接表。

然后我在hibernate类B上有这个方法

@OneToMany( fetch = FetchType.EAGER)
@JoinTable( name = "AB", 
            joinColumns = @JoinColumn( name = "idB"),
            inverseJoinColumns = @JoinColumn( name = "idA") )
public List<A> getAs(){
    //return the list of matching stuff
}

这工作得很好。

现在我想在 hibernate 状态下做这个sql查询:

select * from B inner join AB on B.id = AB.idB where AB.idA = 1234

本质上,“列出所有引用 ID 为 1234 的 A 的 B”

我可以直接执行 sql,但这会破坏 getAs() 的目的

是否可以构造一个标准/限制条款来实现这一点?

最佳答案

在这种情况下,AB 之间的关系不是一对多,而是多对多。你应该这样映射它:

@ManyToMany
@JoinTable(name = "AB", 
            joinColumns = @JoinColumn( name = "idB"),
            inverseJoinColumns = @JoinColumn( name = "idA") )
public List<A> getAs(){
    //return the list of matching stuff
}

请注意,在大多数情况下,急切地获取集合并不是一个好主意,因此 fetch = FetchType.EAGER 已在上面删除。您现在可以在 A 端执行相同的操作以建立双向关系:

@ManyToMany(mappedBy='As')
public List<B> getBs(){
    //return the list of matching stuff
}

现在获取给定 A 的所有 B 只需调用 A 上的 getBs() > 实例。您也可以从任何一方创建条件/编写 HQL 来做到这一点。

关于java - Hibernate 连接表限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8439793/

相关文章:

java - 无法从@PropertySource读取配置文件

java - JPA 是否会像在代码中使用实体时那样在 JPQL 中加载实体?

java - 如何将数组与重复项作为集合进行比较?

oracle - 如何在 Hibernate 中使用 Oracle 查询提示

java - CascadeType.Persist 没有按预期工作

java - 使用java从MQ中读取消息

java - 将框架添加到java项目中

json - 无法初始化代理 - 无 session

java - Hibernate HttpMessageNotWritableException

java - 如何使用 Hibernate Envers 检索具有关系 @ManyToOne 的审计寄存器