我有2个实体:A和B。

@Entity
@Table(name = "A")
class A{
    @Id
    private long id;

    @OneToMany(mapped by="a")
    private Set<B> b;
}

@Entity
@Table(name = "B")
class B{
    @Id
    private long id;

    @ManyToOne
    @JoinColumn(name="a")
    private A a;
}


当我试图做类似的事情

Query q=sessionFactory.openSession().createQuery("select a.id, bArray
 from A as a join a.b as bArray");


我不是B的集合,而是一个B对象。如何获取A类及其相关的B对象?即在调试器中,没有Set with 1元素,只有B元素。

最佳答案

Query q=sessionFactory.openSession().createQuery("select a.id, bArray
 from A as a join a.b as bArray");


通过上面的查询,您将仅获得B的一个对象而不是集合,因为基本上该查询只是执行A和B之间的联接,并返回所有可能的元组(从A中选择a,b作为内部联接B,作为b)

您可以设置自定义结果转换器以进行自定义结果处理,例如this

但是无论如何,您都可以使用以下查询中的join fetch来简单地预取“ b”对象和“ a”对象。

Query q=sessionFactory.openSession().createQuery("select a from A as a join fetch a.b ");

关于java - 在 hibernate 中加入数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32308052/

10-11 02:28