0

我有一個一對一的關係像這樣Hibernate Criteria返回父記錄是否有一對一的子記錄不爲空?

家長

@JsonAutoDetect 
@Entity 
@Table(name = "Parent") 
public class Parent{ 

    private Integer id; 
    private Child child; 

    @Id 
    @GeneratedValue(strategy= GenerationType.AUTO) 
    @Column (name="idparent") 
    public Integer getId() { 
     return id; 
    } 
    public void setId(Integer id) { 
     this.id = id; 
    } 

    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "parent") 
    @JoinColumn(name="idchild", nullable=true) 
    public Child getChild() { 
     return child; 
    } 
    public void setChild(Child child) { 
     child.setParent(this); 
     this.child = child; 
    } 
} 

和孩子

@JsonAutoDetect 
@Entity 
@Table(name="Child") 
public class Child{ 

    private Integer id; 
    private Parent parent; 

    @Id 
    @GeneratedValue(generator = "foreign") 
    @GenericGenerator(name = "foreign", strategy = "foreign", parameters = { @Parameter(name = "property", value = "parent") }) 
    @Column (name = "idchild") 
    public Integer getId() { 
     return id; 
    } 
    public void setId(Integer id) { 
     this.id = id; 
    } 

    @OneToOne(fetch = FetchType.LAZY, optional = true) 
    @Cascade({ org.hibernate.annotations.CascadeType.SAVE_UPDATE }) 
    @PrimaryKeyJoinColumn 
    @JsonIgnore 
    public Parent getParent() { 
     return parent; 
    } 
    public void setParent(Parent parent) { 
     this.parent= parent; 
    } 

}

我希望創建一個返回父標準有孩子是不是空,我嘗試索姆認爲像

Criteria criteria = session.createCriteria(Parent.class); 
criteria.add(Restrictions.isNotNull("child")); 

但是不行,你能幫助我通過舉一個例子嗎?謝謝

+0

只是出於好奇,你使用父母和孩子。父母可以有多個孩子嗎?如果是這樣,你應該在關係的每一端使用OneToMany和ManyToOne,並且在API/jpql標準中使用「存在」。 –

回答

1

首先,映射是錯誤的。在父類中,您說的是該關聯映射爲child.parent,並且在您使用名爲id_child的連接列進行映射之後立即進行映射。下定決心。要麼它被child.parent屬性映射,你應該刪除@JoinColumn。或者它由JoinColumn進行映射,您應該刪除孩子中的@PrimaryKeyJoinColumn,並在Child實體中使用mappedBy="child"

現在,爲了使您的查詢工作,無論映射,你應該簡單地做一個內部聯接:

Criteria criteria = session.createCriteria(Parent.class); 
criteria.createAlias("child"); // inner join 

由於聯接是內部聯接,它只會選擇具有非父母無效的孩子。

+0

嘿,thznks作出迴應,我已經從父母刪除JoinColumn但不工作,你可以請告訴我exactely如何做到這一點 – user820688

相關問題