Java 静态最终字符串字段在运行时仅具有特定值为空

Java 静态最终字符串字段在运行时仅具有特定值为空,java,jakarta-ee,glassfish,Java,Jakarta Ee,Glassfish,我正在使用Java7和GlassFish 4.1.1创建一个JavaEEWeb项目。我的IDE是NetBeans 当重构存储库类中的一些代码时,我在模型类中将字符串“USERS”替换为静态的final字段。执行此操作(清理并构建)后,我的服务中立即出现了一个IllegalArgumentException,并发现该字段被读取为null 模型类: public class User { public static final String TABLE_NAME = "USERS";

我正在使用Java7和GlassFish 4.1.1创建一个JavaEEWeb项目。我的IDE是NetBeans

当重构存储库类中的一些代码时,我在模型类中将字符串“USERS”替换为静态的final字段。执行此操作(清理并构建)后,我的服务中立即出现了一个IllegalArgumentException,并发现该字段被读取为null

模型类:

public class User {

    public static final String TABLE_NAME = "USERS";
    public static final String PRIMARY_KEY = "ID";

    private String id;    
    private String name;

    public User(String id, String name) {
        this.id = id;
        this.name = name;
    }

}
用户存储库,在:

public List<User> get() throws RepositoryException
{
    try {
        return service.retrieve("USERS");
    } catch (SQLException ex) {
        throw new RepositoryException("Retrieval failed.", ex);
    }
}
当然,现在TABLE_NAME的值是错误的

以下是我尝试过的:

  • 查找编译错误(没有)
  • 清洁和建设
  • 从GlassFish取消部署,然后重新部署
  • 重新启动NetBeans
  • 使这一领域不是最终的
  • 谷歌

非常感谢您的帮助!:)

这真的很奇怪,我认为你不能用一个简单的方法重现这种行为?我想把你的表重命名为
USERSS
:)嗯,你有没有试着在有问题的行上设置断点,然后用调试器进行调试?也许这会给我们带来一些启示。你能分享一下你的服务类的代码吗?如果你使用jpa,使用过的数据库?看起来像Java/glassfish中的一些bug。您是否尝试过在其他java/glassfish版本上复制它?
public List<User> get() throws RepositoryException
{
    try {
        return service.retrieve(User.TABLE_NAME);
    } catch (SQLException ex) {
        throw new RepositoryException("Retrieval failed.", ex);
    }
}
// This works!
public static final String TABLE_NAME = "USERSS";