我有以下表格:
[表:第 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() 的目的
是否可以构造一个标准/限制条款来实现这一点?
最佳答案
在这种情况下,A
和B
之间的关系不是一对多,而是多对多。你应该这样映射它:
@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/