Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在没有JPA实体类的情况下使用JPQL从映射表中检索数据_Jpa_Jpql - Fatal编程技术网

如何在没有JPA实体类的情况下使用JPQL从映射表中检索数据

如何在没有JPA实体类的情况下使用JPQL从映射表中检索数据,jpa,jpql,Jpa,Jpql,我有一个简单的用户实体,其中可能有朋友用户对用户的多对多关系,这些关系映射到数据库中的朋友表中,但我没有单独的朋友实体对象进行映射。这是用户实体 @Entity @Table(name="users") public class User extends Persistent{ @NotEmpty @Size(min=4,max=16) @Column(name="USER_NAME",nullable = false,unique = true) private String userna

我有一个简单的用户实体,其中可能有朋友用户对用户的多对多关系,这些关系映射到数据库中的朋友表中,但我没有单独的朋友实体对象进行映射。这是用户实体

@Entity
@Table(name="users")
public class User extends  Persistent{

@NotEmpty
@Size(min=4,max=16)
@Column(name="USER_NAME",nullable = false,unique = true)
private String username;

@NotEmpty
@Email
@Column(name="EMAIL",nullable = false,unique = true)
private String email;

@NotEmpty
@Size(min=3,max=99)
@Column(name="PASSWORD",nullable = false)
private String password;


@Column(name="ACTIVE")
private boolean active = true;

@NotEmpty
@Column(name="FIRST_NAME",nullable = false)
private String firstName;

@NotEmpty
@Column(name="LAST_NAME",nullable = false)
private String lastName;

@NotEmpty
@Column(name="DOB",nullable = false)
private String DOB;

@Column(name="PROFILE_PICTURE")
private String profilePicture;

//user activities

@OneToMany(mappedBy = "user",fetch = FetchType.LAZY,cascade = CascadeType.REMOVE)
private List<Post> posts;

@OneToMany(mappedBy = "user",fetch = FetchType.LAZY,cascade = CascadeType.REMOVE)
private List<Comment> comments;

@OneToMany(mappedBy = "user",fetch = FetchType.LAZY,cascade = CascadeType.REMOVE)
private List<Like> likes;

@ManyToMany(cascade={CascadeType.ALL},fetch=FetchType.EAGER)
@JoinTable(name="friends",
        joinColumns={@JoinColumn(name="userId")},
        inverseJoinColumns={@JoinColumn(name="friendId")})
private List<User> friends;

@ManyToMany(mappedBy="friends",fetch=FetchType.EAGER)
private List<User> friendsWith;
..... 
}

所以,我使用了渴望加载来加载用户的朋友。但是,如果我想加载用户的朋友,而不是急于加载,而是使用JPQL。。。由于我没有朋友实体类,是否可以使用JPQL加载用户朋友信息??我是否需要为映射FRINDS创建单独的友元实体类

实体之间存在关联。可以使用fetch join在JPQL中急切地加载关联:

select distinct u from User u left join fetch u.friends where u.id = :id

这适用于任何关联,也适用于任何映射方式。

我希望JPQL等同于SELECT*来自用户,其中user\u id在SELECT friend\u id中来自user\u id=:userId;我不确定上述加入对我有何帮助/这与使用JPQL的急切加载有什么关系,这正是您的问题所在?如果我正确理解您的实际问题,那么您需要一个加载给定用户的所有好友的JPQL查询,对吗?上面的查询加载给定用户及其所有好友。因此,您只需对返回的用户调用u.getUser。如果你想直接找到用户的朋友,你只需要从用户u中选择f加入u.friends f,其中u.id=:idOk,明白了。。谢谢我不知道join fetch子句是如何工作的..: