开发者

Private field in java annotations

My jboss seam application compile in eclipse without error. When I try to compile manually I have had a error

STATE_QUERY has private access

@NamedQueries({
    @NamedQuery(name = CurrentModuleState.FIND_MODULE_STATE,
         query = CurrentModuleState.STATE_QUERY)
})
public class CurrentModuleState implements java.io.Serializable {
        ...
        private static final String STATE_QUERY = "...";

ant:

<j开发者_JAVA百科avac encoding="cp1251" srcdir="${src-dir}" destdir="${compile-dir}"
            executable="${javac-path}"
            compiler="javac1.6">
    <classpath refid="lib.classpath" />
    <classpath refid="jboss-lib.classpath" />
</javac>

How I can compile that? p.s. sorry for my engish )


It is an odd thing, But I would suppose it is because the field is private but is accessed using the class name in front. The compiler should realize it is referred from the same class, but it obviously doesn't.

So, change the private to protected (not elegant, but should work)

You can also try upgrading the JDK (and hence javac). Note that eclipse uses its own compiler (not javac)


This doesn't exactly answer the question but I don't really see the point of using a constant for the query itself. I would just use something like this:

@Entity
@NamedQuery(name = Customer.FIND_ALL, query="select c from Customer c"),
public class Customer {
    public static final String FIND_ALL = "Customer.findAll";
    // Attributes, constructors, getters, setters
}

And the constant is public because... I want to be able to use it to execute queries:

Query query = em.createNamedQuery(Customer.FIND_ALL);
List<Customer> customers = query.getResultList();

Using a constant for the name of the query makes sense because you'll refer to it from several places (from the @NamedQuery annotation, when invoking the query) and a constant makes your code more robust: it will resist to typing mistakes and refactoring. The advantages are obvious.

However, I personally don't see any real advantage in using a constant for the query itself.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜