Java 在生成的SQL中休眠范围外的不相关实体的连接

Java 在生成的SQL中休眠范围外的不相关实体的连接,java,sql-server,hibernate,jpa,hql,Java,Sql Server,Hibernate,Jpa,Hql,自Hibernate 5.1以来,它开始为我们提供连接两个不相关实体的功能,就像我们在本机SQL中所做的那样。这是一个了不起的功能!但是,我最近遇到了此功能的意外行为。我有一个查询,其中包含相关实体和不相关实体的混合连接(左连接和内部连接)。在生成的SQL中,所有不相关的实体联接都位于查询的底部,这导致了此异常: com.microsoft.sqlserver.jdbc.SQLServerException:无法绑定多部分标识符“tlterm6.term\u id”。 我对这种情况是如何发生的以

自Hibernate 5.1以来,它开始为我们提供连接两个不相关实体的功能,就像我们在本机SQL中所做的那样。这是一个了不起的功能!但是,我最近遇到了此功能的意外行为。我有一个查询,其中包含相关实体和不相关实体的混合连接(左连接和内部连接)。在生成的SQL中,所有不相关的实体联接都位于查询的底部,这导致了此异常:
com.microsoft.sqlserver.jdbc.SQLServerException:无法绑定多部分标识符“tlterm6.term\u id”。

我对这种情况是如何发生的以及为什么以这种方式实现该功能感到困惑(他们一定有很好的解释,但我还没有在网上找到任何解决方案或解释)

是否有人有解决方法的想法或如何解决

该应用程序运行在Hibernate 5.4.6和SQL Server数据库上

实体定义示例:

@Entity
@Table(name = "student")
Public class Student implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", updatable = false, nullable = false)
    private Integer id;

    @Column
    private String first_name;

    @Column
    private String first_name;

    @OneToMany(mappedBy = "student", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<College> colleges = new ArrayList<>();

    // ...Other details and getters/setters omitted
}

@Entity
@Table(name = "college")
Public class College implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", updatable = false, nullable = false)
    private Integer id;

    @Column
    private String name;

    @Column
    private String description;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "student_id")
    private Student student;

    // ...Other details and getters/setters omitted
}
生成的SQL:

FROM dbo.student AS student
INNER JOIN dbo.college AS college ON student.id = college.student_id
INNER JOIN dbo.class AS clazz ON student.id = clazz.student_id

预期生成的SQL应该遵循连接的相同顺序,但是,它将相关/映射的实体连接放在顶部,并将不相关/未映射的实体连接移到底部。

此处是否存在左连接问题?如果没有,请尝试使用左连接。@saifulislamplabon left join有同样的问题:(你能分享你的实体定义吗?@saifulislamplabon我刚刚编辑了这篇文章以包含两个实体定义:我试图理解
tlterm6.term\u id1的来源。也许它在
类`实体'中?
FROM dbo.student AS student
INNER JOIN dbo.college AS college ON student.id = college.student_id
INNER JOIN dbo.class AS clazz ON student.id = clazz.student_id