Java JPA通过查询连接表
我有个奇怪的问题。我想创建如下数据库: 一个学生可以有很多科目。学生对一门学科有一次评估。所以我有 带ID、姓名、姓氏和身份证的班级学生,如:Java JPA通过查询连接表,java,mysql,sql,jpa,orm,Java,Mysql,Sql,Jpa,Orm,我有个奇怪的问题。我想创建如下数据库: 一个学生可以有很多科目。学生对一门学科有一次评估。所以我有 带ID、姓名、姓氏和身份证的班级学生,如: @Id @GeneratedValue long id_student; 在学科课上,我有: @Id @GeneratedValue long id_subject; String name; double graduate 我有三个班,名为StudentWithGraduate: @Id @GeneratedValu
@Id
@GeneratedValue
long id_student;
在学科课上,我有:
@Id
@GeneratedValue
long id_subject;
String name;
double graduate
我有三个班,名为StudentWithGraduate:
@Id
@GeneratedValue
long id;
double evaluation;
@OneToOne
Student student;
@OneToOne
Subject subject;
我想我可以做得更好,但我不知道怎么做。但这不是主要问题。这,我写的是工作,但我想在查询中做一些连接,如:
Vector<Object[]> v = (Vector<Object[]>) em.createQuery(
"select p.name, o.graduate from Student s
left join StudentWithGraduate o on s.id_student=o.student
left join Subject p on p.id_subject=o.subject where
s.surname='"+name+"'").getResultList();
Vector v=(Vector)em.createQuery(
“选择p.name,o.graduate from Student s
在s.id\U student=o.student上与毕业生o左联合
左连接主体p on p.id_Subject=o.Subject,其中
s、 姓氏=“+name+”)。getResultList();
它抛出了一个错误:
异常说明:对象比较只能与OneToOneMappings一起使用。其他映射比较必须通过查询键或直接属性级比较来完成
如何更改此DB方案或更改该查询
对不起我的英语
另外,当我进行研究时,我发现了@joinTables,但我不知道如何使用它。您需要一个,但我将尝试快速解释一些缺失的部分:
在JPQL查询中,您不需要编写哪些是JOIN
条件(即expresions上的),而是从一个实体开始在实体图中导航(下面我从StudentWithGraduate
实体开始):
“:name”被称为命名参数,它可以帮助您重新命名。要为其设置值,请编写以下命令:
Query query = em.createQuery(aboveQuery);
query.setParameter("name", parameterValue);
//....the rest of parameters + getResultList();
您需要一份详细的报告,但我将尝试快速解释一些缺失的部分:
在JPQL查询中,您不需要编写哪些是JOIN
条件(即
expresions上的),而是从一个实体开始在实体图中导航(下面我从StudentWithGraduate
实体开始):
“:name”被称为命名参数,它可以帮助您重新命名。要为其设置值,请编写以下命令:
Query query = em.createQuery(aboveQuery);
query.setParameter("name", parameterValue);
//....the rest of parameters + getResultList();
您需要一份详细的报告,但我将尝试快速解释一些缺失的部分:
在JPQL查询中,您不需要编写哪些是JOIN
条件(即
expresions上的),而是从一个实体开始在实体图中导航(下面我从StudentWithGraduate
实体开始):
“:name”被称为命名参数,它可以帮助您重新命名。要为其设置值,请编写以下命令:
Query query = em.createQuery(aboveQuery);
query.setParameter("name", parameterValue);
//....the rest of parameters + getResultList();
您需要一份详细的报告,但我将尝试快速解释一些缺失的部分:
在JPQL查询中,您不需要编写哪些是JOIN
条件(即
expresions上的),而是从一个实体开始在实体图中导航(下面我从StudentWithGraduate
实体开始):
“:name”被称为命名参数,它可以帮助您重新命名。要为其设置值,请编写以下命令:
Query query = em.createQuery(aboveQuery);
query.setParameter("name", parameterValue);
//....the rest of parameters + getResultList();
它起作用了。我不知道怎么做,但我会读这一页:)如果我还有其他问题,我会问:)它起作用了。我不知道怎么做,但我会读这一页:)如果我还有其他问题,我会问:)它起作用了。我不知道怎么做,但我会读这一页:)如果我还有其他问题,我会问:)它起作用了。我不知道怎么做,但我会读这一页:)如果我还有其他问题,我会问:)