带有WHERE语句的Java JPA Inner JOIN

时间:2009-11-26 16:40:53

标签: java jpa join persistence inner-join

我想注释以下结构:

我有这个问题:


SELECT A.*, BES.*, BES_2.*
INNER JOIN BES ON A.a = BES.a AND A.b = BES.b
INNER JOIN BES AS BES_2 ON A.a = BES_2.a AND A.b = BES_2.b
WHERE (BES.c = N'foo') AND (BES_2.c = N'bar')

我有实体Job(代表A)和JobEndPoint(代表BES)。 Job对象应该包含两个JobEndPoint,它们像一对一关系一样映射。我需要两次JOIN表,两次检查相同的值,只有我在WHERE语句中检查的列“c”不同。


@OneToOne
private JobEndPoint from;

@OneToOne
private JobEndPoint to;

我的问题是现在数据库列和对象字段差别很大,我不知道如何添加WHERE语句。

1 个答案:

答案 0 :(得分:0)

创建一个JPA存储库,然后键入自定义@Query

我假设您已经在parentJobEndPoint字段上链接了ab类。 (为此,请在JobEndPoint上定义一个多列ID,并在父类中指定joinColumns。)

@Query("SELECT u FROM parent 
        LEFT JOIN u.from bes
        LEFT JOIN u.to bes2
        WHERE bes.c = 'foo' 
        AND bes2.c = 'bar'")
Set<Parent> findMatchingParents()