我的jboss seam应用程序在eclipse中编译时没有错误。当我尝试手动编译时,我遇到了错误
STATE_QUERY拥有私人访问权限
@NamedQueries({
@NamedQuery(name = CurrentModuleState.FIND_MODULE_STATE,
query = CurrentModuleState.STATE_QUERY)
})
public class CurrentModuleState implements java.io.Serializable {
...
private static final String STATE_QUERY = "...";
蚂蚁:
<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>
我如何编译? 附:对不起我的意见)
答案 0 :(得分:0)
这是一件奇怪的事情,但我认为这是因为该字段是private
,但可以使用前面的类名来访问。编译器应该意识到它是从同一个类引用的,但显然不是。
所以,将private
更改为protected
(不优雅,但应该有效)
您也可以尝试升级JDK(以及javac)。请注意,eclipse使用自己的编译器(而不是javac)
答案 1 :(得分:0)
这并没有完全回答这个问题,但我并没有真正意识到为查询本身使用常量。我会用这样的东西:
@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
}
常量为public
因为...我希望能够用它来执行查询:
Query query = em.createNamedQuery(Customer.FIND_ALL);
List<Customer> customers = query.getResultList();
使用常量作为查询名称是有意义的,因为您将从多个位置(从@NamedQuery
注释中调用查询时)引用它,并且常量使您的代码更健壮:它将抵制打字错误和重构。优势显而易见。
但是,我个人认为查询本身使用常量没有任何实际优势。