2011-08-24 79 views
0

我的實體模型類的Hibernate的標準內加入全部的實體類的字段

------- A ----------- 
private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @Column(name = "NameA") 
    private String nameA; 

    public B getBid() { 
     return b; 
    } 

    public void setBid(B bid) { 
     this.b = bid; 
    } 

    public String getNameA() { 
     return nameA; 
    } 

    public void setNameA(String nameA) { 
     this.nameA = nameA; 
    } 
    @JoinColumn(name = "BID", referencedColumnName = "ID") 
    @ManyToOne(fetch= FetchType.LAZY) 
    private B b; 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 
-------------------------------------------- 
------------------ B ----------------------- 

private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @Column(name = "NameB") 
    private String nameB; 


    public String getNameB() { 
     return nameB; 
    } 

    public void setNameB(String nameB) { 
     this.nameB = nameB; 
    } 


    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

和 我想 使這個查詢session.createQuery("select a.b from A a").list();

與標準API ????

回答

1

既然你沒有相反的關係,而且由於標準不允許選擇比根實體的另一個實體,你必須使用子查詢,但它的醜陋:

DetachedCriteria subquery = DetachedCriteria.forClass(A.class, "a"); 
subquery.createAlias("a.b", "b2"); 
subquery.setProjection(Projections.property("b2.id")); 

Criteria c = session.createCriteria(B.class, "b1"); 
c.add(Subqueries.propertyIn("b1.id", subquery)); 

如果你不得不從B到A的逆一對多的關係,你只需要做

Criteria c = session.createCriteria(B.class, "b1"); 
c.createAlias("b1.as", "a"); 

順便說一句,這些非動態構造查詢更好地HQL比標準的API表示。如果你真正的查詢是你問的那個,只需使用HQL:它更具可讀性,功能更強大。

+0

您的示例和建議是好的,但沒有其他方式來做到這一點?例如b。*或b.nameB B類的特殊字段,它沒有映射A類的註釋我的示例以上模型類 –

+0

不確定我有了解。我給你翻譯了你的HQL查詢:「從A a中選擇a.b」。這個查詢返回至少一個A的實例引用的B的所有實例。這是你想要的嗎?如果不是,你想要什麼? –

+0

我只想做到這一點Projections.property或Projectionlist不想使用DetachedCriteria或子查詢 –