java JPA 从具有多对多关联的集合中选择
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/15153877/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
JPA select from collection with many-to-many association
提问by Andrey
I have 2 Entity classes with Many-to-Many association.
我有 2 个具有多对多关联的实体类。
ModPm:
模组:
@Entity
@Table(name = "MOD_PM")
public class ModPm extends WebPageObject implements Serializable, IDBNamedEntity {
private static final long serialVersionUID = 1L;
public final static String Q_GET_WITHOUT_STATUS_FOR_SCOPE = "ModPm.getWithoutStatusForScope";
@Id
private long id;
....
@ManyToMany
@JoinTable(name = "MOD_PM_SCOPE_TYPES",
joinColumns = @JoinColumn(name = "PM_ID"),
inverseJoinColumns = @JoinColumn(name = "SCOPE_TYPE_ID")
)
private List<ModScopeType> modScopeTypes;
ModScopeType:
ModScope 类型:
@Entity
@Table(name = "MOD_SCOPES")
@Cacheable
public class ModScopeType extends WebPageObject implements Serializable {
private static final long serialVersionUID = 1L;
public final static String Q_GET_ALL = "ModScopeType.getAll";
@Id
@Column(name = "ID")
private long id;
....
//bi-directional many-to-many association to ModPm
@ManyToMany
@JoinTable(name = "MOD_PM_SCOPE_TYPES",
joinColumns = @JoinColumn(name = "SCOPE_TYPE_ID"),
inverseJoinColumns = @JoinColumn(name = "PM_ID")
)
private List<ModPm> modPms;
Is it possible to select entities from MOD_PM table which have record in MOD_PM_SCOPE_TYPES table for SCOPE_TYPE_ID=1?
是否可以从 MOD_PM 表中选择实体,这些实体在 MOD_PM_SCOPE_TYPES 表中具有 SCOPE_TYPE_ID=1 的记录?
Native SQL Query:
本机 SQL 查询:
SELECT ID, NAME FROM MOD_PM WHERE ID IN (SELECT PM_ID FROM MOD_PM_SCOPE_TYPES WHERE SCOPE_TYPE_ID=1)
How can I translate this query to JPQL?
如何将此查询转换为 JPQL?
回答by Michael Wiles
When you refer to SCOPE_TYPE_ID in the query what are you referring to? Could be the ID of ScopeType or another field that I'm not seeing. I'm assuming the scope type id field is missing.
当您在查询中提到 SCOPE_TYPE_ID 时,您指的是什么?可能是 ScopeType 的 ID 或我没有看到的其他字段。我假设缺少范围类型 id 字段。
Try this:
试试这个:
select p from ModPm p join p.modScopeTypes type where type.scopeTypeId = 1