【发布时间】:2018-11-01 20:18:59
【问题描述】:
如何在 JPA /Eclipselink 2.6.5 中使用三个级别的“LEFT JOIN”来获取 Table3(关系 OneToOne)?
此命令不获取它:(错误)
SELECT t1 FROM Table1 t1 LEFT JOIN FETCH t1.table2 t2
LEFT JOIN FETCH t2.table3
此命令获取它,但不要保留第一个“LEFT”:(错误)
SELECT t1 FROM Table1 t1 LEFT JOIN FETCH t1.table2
LEFT JOIN FETCH t1.table2.table3
这个获取它,但它只有两个级别:(Unwanted)
SELECT t2 FROM Table2 t2 LEFT JOIN FETCH t2.table3
表1:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "Id")
private Integer id;
@JoinColumn(name = "Table2", referencedColumnName = "Id")
@ManyToOne(fetch = FetchType.LAZY)
private Table2 table2;
表2:
@Id
@Basic(optional = false)
@NotNull
@Column(name = "Id")
private Integer id;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "table2")
private Collection<Table1> table1Collection;
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "table2")
private Table3 table3;
表3:
@Id
@Basic(optional = false)
@NotNull
@Column(name = "Id")
private Integer id;
@JoinColumn(name = "Table2", referencedColumnName = "Id", insertable = false, updatable = false)
@OneToOne(fetch = FetchType.LAZY, optional = false)
private Table2 table2;
谢谢!
【问题讨论】:
-
你的各种尝试生成的SQL是什么? EclipseLink 2.4+ 应该支持 JPQL stackoverflow.com/a/16693590/496099中的嵌套连接提取
标签: java jpa eclipselink