Private field in java annotations

前端 未结 2 1540
北海茫月
北海茫月 2020-12-21 13:28

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

相关标签:
2条回答
  • 2020-12-21 14:01

    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 讨论(0)
  • 2020-12-21 14:17

    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)

    0 讨论(0)
提交回复
热议问题