【问题标题】:Hibernate select error on inner join内部连接上的休眠选择错误
【发布时间】:2016-09-10 13:04:01
【问题描述】:

我在使用 hibernate/HQL 时遇到了一个错误

我的表是 table1(id, data),其中 id -> 主键和 table2(id, anotherdata),其中 id -> 对 table1.id 的外键引用。

头等舱->

@Entity
@Table(name = "table1")
public class Table1 {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private int id;

    @Column(name = "data")
    private String data;

    @OneToOne
    private Table2 table2;
    //construct, get, set
}

二等->

@Entity
@Table(name = "table2")
public class Table2 {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private int id;

    @Column(name = "anotherdata")
    private String data;
    //get, set, construct
}

HQL 查询是 SELECT t1.id, t1.data, t2.data FROM Table1 as t1 JOIN t1.table2 as t2

休眠日志:select t1.id, t1.data, t2.anotherdata from table1 t1 inner join table2 on t1.t2_id = t2.id

这会导致错误ERROR: column t1.t2__id does not exist

在这个语句的末尾“on t1.t2_id = t2.id”我应该有“on t1.id = t2.id”(纯sql)

我该如何解决这个问题?将感谢您的所有回答!

【问题讨论】:

    标签: java postgresql hibernate join


    【解决方案1】:

    您的查询是正确的,但您应该更改映射:

    @Entity
    @Table(name = "table1")
    public class Table1 {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "id")
        private int id;
    
        @Column(name = "data")
        private String data;
    
        @OneToOne(mappedBy = "table1", cascade = CascadeType.ALL)
        private Table2 table2;
        //construct, get, set
    }
    
    
    
    @Entity
    @Table(name = "table2")
    public class Table2 {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "id")
        private int id;
    
        @Column(name = "anotherdata")
        private String data;
        //get, set, construct
    
        @OneToOne
        @PrimaryKeyJoinColumn
        private Table1 table1;
    }
    

    【讨论】:

    • 谢谢。它可以工作,但现在我在 List list = session.createQuery("SELECT t1.id, t1.data, t2.data FROM Table1 as t1 JOIN t1.table2 as t2") 中有 ClassCastException。列表();
    • 附言。解决了。我的 HQL 返回 List 其中 Object[0] 是 table1 id,...[1]是表 1 数据和 ..[2]是table2 id。要返回 List 你应该使用 SELECT t1 FROM Table1 t1 JOIN t1.table2
    猜你喜欢
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多