JPAQuery 加入中间多对多 table
JPAQuery join intermediate many to many table
我正在使用 QueryDSL JPA,并希望在两个表之间进行连接。我已经在这里发现了很多类似的问题,但我的案例在一个小细节上与所有问题都不同。这是我的 类:
的简化版本
@Entity(name = "TABLE_A")
public class TableA {
@Id
@Column(name = "ID_A", nullable = false)
private Long idA;
}
@Entity(name = "TABLE_B")
public class TableB {
@Id
@Column(name = "ID_B", nullable = false)
private Long idB;
}
@Entity(name = "TABLE_C")
public class TableC {
@Id
@Column(name = "ID_C", nullable = false)
private Long idC;
@JoinColumn(name = "ID_A", referencedColumnName = "ID_A")
@ManyToOne
private TableA tableA;
@JoinColumn(name = "ID_B", referencedColumnName = "ID_B")
@ManyToOne
private TableB tableB;
}
现在我要做的是连接表 A、C 和 B,以找到链接到 A 的 B。我知道这似乎是一个无用的步骤,为什么不直接添加从 A 到 B 的关系.在我的情况下,这是必需的,这些只是示例 类 来说明。
我试过这个:
QTbTableA tableA = QTbTableA.tableA;
QTbTableB tableC = QTbTableC.tableC;
JPAQuery query = new JPAQuery(entityManager).from(tableA);
query.leftJoin(tableA, tableC.tableA);
连接抛出异常,因为 tableC.tableA 不是根路径,只有 属性。但是我该如何正确连接这些表呢?
提前致谢!
如果您想保留当前的 impl,您可以从 TableC
开始,然后加入其他表:
query.from(tableC)
.innerJoin(tableC.tableA, tableA)
.innerJoin(tableC.tableB, tableB)
.where(tableA.idA.eq(myId)
.list(tableB);
我正在使用 QueryDSL JPA,并希望在两个表之间进行连接。我已经在这里发现了很多类似的问题,但我的案例在一个小细节上与所有问题都不同。这是我的 类:
的简化版本@Entity(name = "TABLE_A")
public class TableA {
@Id
@Column(name = "ID_A", nullable = false)
private Long idA;
}
@Entity(name = "TABLE_B")
public class TableB {
@Id
@Column(name = "ID_B", nullable = false)
private Long idB;
}
@Entity(name = "TABLE_C")
public class TableC {
@Id
@Column(name = "ID_C", nullable = false)
private Long idC;
@JoinColumn(name = "ID_A", referencedColumnName = "ID_A")
@ManyToOne
private TableA tableA;
@JoinColumn(name = "ID_B", referencedColumnName = "ID_B")
@ManyToOne
private TableB tableB;
}
现在我要做的是连接表 A、C 和 B,以找到链接到 A 的 B。我知道这似乎是一个无用的步骤,为什么不直接添加从 A 到 B 的关系.在我的情况下,这是必需的,这些只是示例 类 来说明。
我试过这个:
QTbTableA tableA = QTbTableA.tableA;
QTbTableB tableC = QTbTableC.tableC;
JPAQuery query = new JPAQuery(entityManager).from(tableA);
query.leftJoin(tableA, tableC.tableA);
连接抛出异常,因为 tableC.tableA 不是根路径,只有 属性。但是我该如何正确连接这些表呢?
提前致谢!
如果您想保留当前的 impl,您可以从 TableC
开始,然后加入其他表:
query.from(tableC)
.innerJoin(tableC.tableA, tableA)
.innerJoin(tableC.tableB, tableB)
.where(tableA.idA.eq(myId)
.list(tableB);