gpt4 book ai didi

java - JPA 元模型字段为空

转载 作者:行者123 更新时间:2023-12-02 07:41:42 26 4
gpt4 key购买 nike

我有一些 JPA 类,并通过 org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor 生成元模型。所以,我的类(class)之一是:

@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 元模型的参数值应该为空。据我所知,不可能从 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;
}
}

关于java - JPA 元模型字段为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36745602/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com