繁体   English   中英

JPA元模型字段为空

[英]JPA metamodel fields are null

我有一些JPA类,并通过org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor生成元模型。 所以,我的一个课程是:

@Table(name = "USER")
@Entity
@NamedQueries({@NamedQuery(name = "User.byLogin", query = "select u from User u where u.login = :login and u.active = :active")})
public class User implements Serializable {
  @Column(name = "ID")
  @Id
  private Long id;
  @Column(name = "LOGIN")
  private String login;
  @Column(name = "ACTIVE")
  private Boolean active;
  // etc..
}

Metamodel处理器生成:

@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(User.class)
public abstract class User_ {

    public static volatile SingularAttribute<User, Long> id;
    public static volatile SingularAttribute<User, Boolean> active;
    public static volatile SingularAttribute<User, String> login;

}

然后,我的业务逻辑类中有以下代码:

Map<String, Object> params = new HashMap<String, Object>();
params.put(User_.login.getName(), username);
params.put(User_.active.getName(), Boolean.TRUE);
userDao.executeNamedQuery("User.byLogin", params);

此代码在第二行与NPE崩溃。 我通过调试器注意到User_字段都是null 所以,问题是:有没有办法初始化这些字段? 我怎样才能做到这一点?

PS这是一个遗留代码,它长时间工作正常,但现在它似乎以某种方式被打破。

JPA元模型的参数值应该为null。 从我得到的是不可能从User_.login.getName()获取包含名称的字符串,因为User_.login不存在(从未初始化)。 User_是一个抽象类,这些值无法初始化。 从元模型中获取变量名的唯一方法是获取所有这些名称。 我正在使用以下程序

public class EntityReader {
    public static<T> String[] getArguments(Class<T> classToRead){
        Field[] fields = classToRead.getFields();
        String[] result = new String[fields.length];
        for (int i = 0; i < fields.length; i++) result[i] = fields[i].getName();
        return result;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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