繁体   English   中英

JPA通过查询联接表

[英]JPA join tables through query

我有一个奇怪的问题。 我想创建这样的数据库:一个学生可以有很多科目。 学生对一门学科有一项评估。 所以我有ID,姓名,姓氏和A_I ID的班级学生,例如:

@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();

并引发错误:异常描述:对象比较只能与OneToOneMappings一起使用。 其他映射比较必须通过查询键或直接属性级别比较来完成。

如何更改此数据库方案或更改该查询?

对不起我的英语不好。

PS。 当我进行研究时,我发现了@joinTables,但是我不知道如何使用它。

您需要在JPQL中进行简短介绍 ,但是我将尝试快速解释一些缺少的部分:

在JPQL查询中,您不会写出JOIN条件(即ON表达式),而是从实体图(在下面以StudentWithGraduate实体开始)浏览实体图:

SELECT p.name, o.graduate FROM StudentWithGraduate o
    LEFT JOIN o.student s
    LEFT JOIN o.subject p
    WHERE s.surname=:name

“:name”被称为命名参数,它可以帮助您再次进行SQL注入 为了为其设置值,您可以编写以下内容:

Query query = em.createQuery(aboveQuery);
query.setParameter("name", parameterValue);
//....the rest of parameters + getResultList();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM