我正在尝试查询名为Section的实体,该实体与名为students的实体有很多关系。见下面的部分实体
@Entity
@Table(name="Sections")
public class Section implements Serializable {
@Id
private int crn;
private String sectionCode;
private String courseCode;
private String semester;
private int instructorId;
@ManyToOne
@JoinColumn(name="instructorId", referencedColumnName="id" ,
insertable=false, updatable=false)
private Instructor instructor;
@ManyToOne
@JoinColumn(name="courseCode", referencedColumnName="courseCode" ,
insertable=false, updatable=false)
private Course course;
@ManyToMany
@JoinTable(name="Student_Section",
joinColumns=@JoinColumn(name="Enrolledcrn", referencedColumnName="crn"),
inverseJoinColumns=@JoinColumn(name="id", referencedColumnName="id"))
private List<Student> students;
一个部分有很多学生,许多学生可以在同一部分。我创建了一个名为Student_Section的连接表,它告诉哪些学生注册了哪个部分是这个表的快照
ENROLLEDCRN ID
----------- --
13151 6
13151 7
13151 8
13151 9
13151 10
13151 11
问题是:我正在尝试获取特定学期特定学生的部分列表。我尝试了以下查询:
List<Section> student_Sections= em.createQuery("select s from Section s inner join s.students e "
+ "where e.id = :userID AND s.semester = :semester AND e.ENROLLEDCRN = :s.crn").
setParameter("semester", semester)
.setParameter("userID", userID)
.getResultList();
但是出现了这个错误! (指定的输入参数&#39;&#39; {0}&#39;&#39;不遵循Java标识符的规则。) 谁能告诉我这里做错了什么?
这里是他创作后表格部分的一部分:
CRN COURSECODE INSTRUCTORID SECTIONCODE SEMESTER
----- ---------- ------------ ----------- -----------
14251 CMPS251 2 L51 Spring 2014
13251 CMPE263 3 L51 Fall 2013