简体   繁体   中英

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:

<javac 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? ps 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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM