我写了一个简单的嵌套查询
@Autowired
@PersistenceContext
EntityManager entityManager;
@Autowired
Configuration configuration;
private JPASQLQuery<?> queryFactory;
@PostConstruct
public void init() {
queryFactory = new JPASQLQuery<>(entityManager, configuration);
}
public void student() {
QStudent student = new QStudent("student");
QStudent nested = new QStudent("nested");
List<?> fetch = queryFactory.select(student.id)
.from(SQLExpressions.select(nested.id)
.from(nested), student)
.fetch();
}
实体结构是这样的
@Entity
@Table(name = "u_student")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
生成的sql就是这样
选择student.id 从u_student(选择nested.id 来自u_student嵌套)作为学生
外部sql添加了一个tableName,导致sql语法错误
我错了吗?这样的嵌套查询应如何编写?
第一次发送问题不是很有用,谢谢。
答案 0 :(得分:0)
发现使用PathBuilder可以解决此问题
完整的代码是:
PathBuilder<Tuple> studentAlias = new PathBuilder<>(Tuple.class,"student");
QStudent student = new QStudent("student");
QStudent nested = new QStudent("nested");
List<?> fetch = queryFactory.select(student)
.from(SQLExpressions.select(nested.id)
.from(nested), studentAlias)
.fetch();
生成的sql:
select student.id as id1_90_0_
from (select nested.id from u_student nested) as student
您有更好的计划吗?