【发布时间】:2014-01-08 07:02:40
【问题描述】:
我有一个没有主键的映射表。它只有 2 列,例如 student_id 和 test_id 每个学生都有多个测试
student_id test_id
1001 21
1001 52
1001 35
1001 29
1001 12
当我写查询时
select test_id from test_map where student_id =1001
它获取正确的记录,但是当我通过休眠条件获取时,它显示 5 个值,其中 test_id 仅为 21
在我的pojo中 我尝试使用 student_id 作为@ID,并且在那个 pojo 中没有@ID
Criteria criteria = session.createCriteria(StudentTestMapping.class);
criteria.add(Restrictions.eq("studentId", studentId));
List<StudentTestMapping> screenList=criteria.list();
Iterator<StudentTestMapping> testItr = screenList.iterator();
while (testItr.hasNext()) {
StudentTestMapping studentTestMap = (StudentTestMapping) testItr.next();
Long testId = studentTestMap.getTestId();
System.out.println("testId : " + testId);
}
StudentTestMapping.java
@Entity
@Table(name = "test_map")
class StudentTestMapping{
Long studentId;
Long testId;
@ID
@Column(name = "student_id")
public Integer getStudentId()
{
return this.studentId;
}
public void setStudentId(Integer studentId)
{
this.studentId = studentId;
}
@Column(name = "test_id")
public String getTestId()
{
return this.testId;
}
public void setTestId(String testId)
{
this.testId = testId;
}
}
【问题讨论】:
-
您能否在此处提供更多信息,例如您的标准代码和映射
-
ID 应该唯一标识表中的一行。如果没有您实体的代码、您正在执行的代码、示例输入和示例输出,我们将无能为力。
-
我已经更新了代码
-
您的映射没有意义:studentId 不能唯一标识您的表中的一行。您需要添加一个真实 ID 列,或者使用复合 ID。