0

根据EclipseLink/Examples/JPA/MappingSelectionCriteria我可以对 OneToOne 或 OneToMany 关系进行一些过滤。为此,我必须实施DescriptorCustomizer.

我的问题是:我可以用这种技术做一些条件过滤吗?怎么做?我的意思是,在提到的链接的例子中,我们可以写这样的东西

public class ConfigureBsFilter implements DescriptorCustomizer {

    public void customize(ClassDescriptor descriptor) throws Exception {
        OneToManyMapping mapping = (OneToManyMapping) descriptor
                .getMappingForAttributeName("bs");

        ExpressionBuilder eb = new ExpressionBuilder(mapping
                .getReferenceClass());
        Expression fkExp = eb.getField("A_ID").equal(eb.getParameter("A_ID"));
        Expression activeExp = eb.get("active").equal(true);

        mapping.setSelectionCriteria(fkExp.and(activeExp));
    }
}

但是如果在表达式中

Expression activeExp = eb.get("active").equal(true);

"active"并非总是如此,true但必须在运行时通过某些参数进行设置。我可以这样做吗?怎么做?

4

1 回答 1

0

查看wiki.eclipse.org/Using_Advanced_Query_API_(ELUG)您可以使用查询重定向器,ForeignReferenceMapping#getSelectionQuery()以便您的查询重定向器可以动态克隆查询并根据需要添加过滤器。但是,将参数传递给重定向器需要有创意,例如将它们存储在线程上下文或会话的属性映射中。

于 2013-04-12T18:58:00.287 回答