在 JPA 中,我如何找到所有具有 属性 值的类型和具有 属性 值的 ManyTomany 相关实体?
In JPA, how would I find all of a type that has a property value and a ManyTomany related entity with a property value?
我想获取所有具有名为 "Create" 的操作的侦听器。
我有以下实体(针对此问题进行了简化):
@Entity
public class Listener
{
...elided...
@ManyToMany(targetEntity = Action.class, fetch = FetchType.EAGER)
@JoinTable(
name = "ListenerActions",
joinColumns = @JoinColumn( name = "listenerId", referencedColumnName = "id" ),
inverseJoinColumns = @JoinColumn( name = "actionId", referencedColumnName = "id" )
)
List<Action> actions;
}
@Entity
public class Action
{
...elided...
private String name;
}
如何过滤操作列表?我只需要 Listener 的 "actions" 中的其中一项操作具有名称 "Create".
JPA 2 查询中的路径表达式可以导航到集合值字段,包括跨越一对多或多对多关系,但这必须是路径中的最后一步; JPA 不允许您编写从那里导航到更远的路径表达式。因此,要执行您想要执行的那种过滤,您需要执行连接或创建子查询。 JPA 2.0 规范提供了前者的这个例子:
SELECT DISTINCT o
FROM Order o JOIN o.lineItems l
WHERE l.product.productType = 'office_supplies'
,里面有你想要的形式。
根据您的架构进行调整留作练习。
我想获取所有具有名为 "Create" 的操作的侦听器。
我有以下实体(针对此问题进行了简化):
@Entity
public class Listener
{
...elided...
@ManyToMany(targetEntity = Action.class, fetch = FetchType.EAGER)
@JoinTable(
name = "ListenerActions",
joinColumns = @JoinColumn( name = "listenerId", referencedColumnName = "id" ),
inverseJoinColumns = @JoinColumn( name = "actionId", referencedColumnName = "id" )
)
List<Action> actions;
}
@Entity
public class Action
{
...elided...
private String name;
}
如何过滤操作列表?我只需要 Listener 的 "actions" 中的其中一项操作具有名称 "Create".
JPA 2 查询中的路径表达式可以导航到集合值字段,包括跨越一对多或多对多关系,但这必须是路径中的最后一步; JPA 不允许您编写从那里导航到更远的路径表达式。因此,要执行您想要执行的那种过滤,您需要执行连接或创建子查询。 JPA 2.0 规范提供了前者的这个例子:
SELECT DISTINCT o FROM Order o JOIN o.lineItems l WHERE l.product.productType = 'office_supplies'
,里面有你想要的形式。
根据您的架构进行调整留作练习。