首页 > 解决方案 > 运行了附加查询,但它不是 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]

标签: javajpa-2.1

解决方案


推荐阅读