java - 运行了附加查询,但它不是 select 语句的一部分
问题描述
我创建了两个实体 Java 文件,表明有两个表,User 和 UserPasswordHistory,UserPasswordHistory 与 user 表有 ManyToOne 关系,每当我通过外键 userid 选择 UserPasswordHistory 时,它也会选择 User 表。
我用来测试 JPA 的库是 \EclipseLink 2.5.2,链接是 EclipseLink 2.5.2库列表附带的库
我已经定义了@ManyToOne (fetch=FetchType.LAZY),但问题仍然存在
用户.java
@Entity
@Table(name="Users")
public class User {
@Id
@GeneratedValue( strategy= GenerationType.AUTO )
private int userId;
private String username;
private String passowrd;
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUsername() {
return username;
}
....
用户密码历史.java
@Entity
public class UserPasswordHistory {
@Id
@GeneratedValue( strategy= GenerationType.AUTO )
private long historyId;
private String password;
private User user;
public long getHistoryId() {
return historyId;
}
public void setHistoryId(long historyId) {
this.historyId = historyId;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@ManyToOne (fetch=FetchType.LAZY)
@JoinColumn(name = "userId")
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
JPQL 代码
EntityManagerFactory emfactory = Persistence.createEntityManagerFactory("JPA_TEST");
EntityManager entitymanager = emfactory.createEntityManager();
String jpql2 = "select uph from UserPasswordHistory uph where uph.user.userId = :userid";
Query query2 = entitymanager.createQuery(jpql2);
query2.setParameter("userid", 1305);
List<UserPasswordHistory> uphList = query2.getResultList();
for (UserPasswordHistory uph:uphList ) {
System.out.println(uph.getHistoryId() + " " + uph.getPassword());
}
参考日志文件的结果,它仍然会查询粗体的用户表
[EL Info]: connection: 2019-04-12 10:45:43.733--ServerSession(1345636186)--Thread(Thread[main,5,main])--file:/C:/KWSP/jpa_test/JPA_TEST/build/classes/_JPA_TEST login successful
[EL Fine]: sql: 2019-04-12 10:45:43.999--ServerSession(1345636186)--Connection(1206569586)--Thread(Thread[main,5,main])--SELECT HISTORYID, PASSWORD, USER_USERID FROM USERPASSWORDHISTORY WHERE (USER_USERID = ?)
bind => [1305]
这是意外的查询:
[EL Fine]: sql: 2019-04-12 10:45:44.03--ServerSession(1345636186)--Connection(1206569586)--Thread(Thread[main,5,main])--SELECT USERID, PASSOWRD, USERNAME FROM Users WHERE (USERID = ?)
bind => [1305]
解决方案
推荐阅读
- javascript - 在一个组件中导入 CSS 就是将 CSS 影响添加到其他组件。如何和为什么?
- regex - 正则表达式找到具有优先顺序的匹配项?
- apache-spark - Spark 无法以分区和追加模式写入新的配置单元表
- flutter - 颤动的文本字段标签文本没有出现
- c++ - 如何更好地表示 6 个整数键而不是作为 6 维数组的索引?
- json - 如何在 Go 中解码 JSON,它将多个元素作为类型数组返回,将单个元素作为类型返回
- tensorflow - tensorflow 1.x 重塑占位符
- networking - 如何将 VM 连接到 ad-hoc 网络?
- reactjs - 如何根据 React 中选择的选项显示组件?
- c# - “foreach”不过滤特定控件