JPA select 对 ManyToMany 的查询
JPA select query on ManyToMany
谁能帮我 SELECT 查询这个 ManyToMany 连接?我想 select 在我的 EJB class.
中注册由用户 ID 指定的用户
课程实体片段
Public class Course implements Serializable {
...
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
@ManyToMany
@JoinTable(name="course_user", joinColumns={@JoinColumn(name="course_id", referencedColumnName="id")},
inverseJoinColumns={@JoinColumn(name="user_id", referencedColumnName="id")})
private List<User> enrolledStudents;
...
用户实体片段
public class User implements Serializable {
private static final long serialVersionUID = 1L;
...
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
@ManyToMany(mappedBy="enrolledStudents")
private List<Course> enrolledCourses;
...
例如,这是我在 EJB 中的另一个 select 查询,但它不在 ManyToMany 上。我想要类似的东西,但不知道如何..
public List<Course> findOwndedCourses(long id) {
TypedQuery<Course> query = entityManager.createQuery("SELECT c FROM Course c WHERE c.owner.id = :ownerId", Course.class);
query.setParameter("ownerId", id);
return query.getResultList();
}
谢谢大家的帮助!!
这个查询应该做到:
select c FROM Course c JOIN c.enrolledStudents u WHERE u.id = :userId
或者这个可能更简单(连接是隐式的):
FROM Course c WHERE c.enrolledStudents.id = :userId
谁能帮我 SELECT 查询这个 ManyToMany 连接?我想 select 在我的 EJB class.
中注册由用户 ID 指定的用户课程实体片段
Public class Course implements Serializable {
...
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
@ManyToMany
@JoinTable(name="course_user", joinColumns={@JoinColumn(name="course_id", referencedColumnName="id")},
inverseJoinColumns={@JoinColumn(name="user_id", referencedColumnName="id")})
private List<User> enrolledStudents;
...
用户实体片段
public class User implements Serializable {
private static final long serialVersionUID = 1L;
...
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
@ManyToMany(mappedBy="enrolledStudents")
private List<Course> enrolledCourses;
...
例如,这是我在 EJB 中的另一个 select 查询,但它不在 ManyToMany 上。我想要类似的东西,但不知道如何..
public List<Course> findOwndedCourses(long id) {
TypedQuery<Course> query = entityManager.createQuery("SELECT c FROM Course c WHERE c.owner.id = :ownerId", Course.class);
query.setParameter("ownerId", id);
return query.getResultList();
}
谢谢大家的帮助!!
这个查询应该做到:
select c FROM Course c JOIN c.enrolledStudents u WHERE u.id = :userId
或者这个可能更简单(连接是隐式的):
FROM Course c WHERE c.enrolledStudents.id = :userId