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
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.
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)