【发布时间】:2016-08-13 05:42:58
【问题描述】:
我有一些 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..
}
元模型处理器生成这个:
@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。所以,问题是:有没有办法初始化这些字段?我该怎么做?
附:这是一个遗留代码,它运行良好很长时间,但现在它似乎以某种方式被破坏了。
【问题讨论】:
-
JPA 元模型仅用于标准查询,如 here 所述。我不确定它是否可以用于命名查询的参数构造。另请注意,用法与您的完全不同
-
@perissf 我明白了。我唯一不明白的是它以前以某种方式工作过。所以有大量类似的遗留代码,我想知道是否有办法在不重写所有代码的情况下修复它。
标签: java hibernate jpa jpamodelgen