EntityQuery.setRestrictions和带参数的Ejbql

时间:2009-12-10 23:40:39

标签: seam

如果有人能告诉我如何使用来自 org.jboss.seam.framework的 setRestrictions 方法属于 EntityQuery 对象,那将是很好的。 EntityQuery 包。

我试图以这种方式使用它:

...
import org.jboss.seam.framework.EntityQuery;
import org.jboss.seam.core.Expressions.ValueExpression;

public class LetterList extends EntityQuery<Letter>
{
    public LetterList()
    {
        setEjbql("select letter from Letter letter");
    }

    public void sampleMethod(){                 
        List<ValueExpression> restrictions = new ArrayList<ValueExpression>();
        restrictions.add(createValueExpression("letter.id=7"));
        setRestrictions(restrictions);              
    }

}

然而,这段代码抛出异常。

以下行也会导致错误:

String[] RESTRICTIONS = {"letter.id=7"};
setRestrictionExpressionStrings(Arrays.asList(RESTRICTIONS));

如果可以在使用 setEjbql 时以漂亮的方式传递任何参数,这也很有趣。我的意思是是否可以避免连接。

我真的试图找到一些相关代码的例子,但是徒劳无功。所以,我非常感谢几行代码。

1 个答案:

答案 0 :(得分:0)

尝试以下示例:

@Name("letterList") // (1)
public class LetterList extends EntityQuery<Letter> {

    private Long letterId;

    public LetterList() {
        setEjbql("select letter from Letter letter");
        setRestrictionExpressionStrings(Arrays.asList(new String[] {
            "letter.id = #{letterList.letterId}" // (2)
        }));
    }

    public Long getLetterId() { // (3)
        return letterId;
    }
    public void setLetterId(Long letterId) {
        this.letterId = letterId;
    }
}

请注意三个评论位置:

  1. @Name注释将您的类声明为接缝组件。
  2. 每个限制表达式必须包含一个要评估的表达式,不能少于,不能再多。它不能像你的例子那样使用常量。
  3. 您需要为限制表达式中引用的每个属性定义一个getter。