2013-03-07 31 views
0

我有兩個表hesk_users,user如下。如何在Spring中使用Hibernate在子查詢中從一對一關係中獲取數據

@Entity @Table(名稱= 「hesk_users」) 公共類UserHesk {

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

@OneToOne 
@JoinColumn(name="user_id") 
private User user; 

    set.... get.. 

}

@Entity @Table(名稱= 「用戶」) 公共類用戶實施序列化{

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

@NotEmpty 
@Column 
private String firstname; 

    @OneToOne(mappedBy="user") 
private UserHesk userHesk; 

    set ... get ... 

}

我有Hibernate查詢,但它不工作..

  DetachedCriteria detachedCriteria=DetachedCriteria.forClass(UserHesk.class) 
    .setProjection(Projections.property("user_id")); 

    Criteria criteria=sessionFactory.getCurrentSession().createCriteria(User.class); 
    criteria.add(Property.forName("id").notIn(detachedCriteria)); 
    User user=(User)criteria.list().get(0); 
    System.out.println(user.getFirstname()); 
    System.out.println("Subquery Size "+criteria.list().size()); 

誤差user_id申請。由於關係而無法獲得。

回答

0

HQL和條件查詢總是使用實體類和屬性。從來沒有基礎表和列的名稱。 UserHesk類沒有任何user_id屬性。它有一個user屬性。

因此,代碼應該是

DetachedCriteria detachedCriteria = 
    DetachedCriteria.forClass(UserHesk.class) 
        .setProjection(Projections.property("user.id")); 

甚至

DetachedCriteria detachedCriteria = 
    DetachedCriteria.forClass(UserHesk.class) 
        .createAlias("user", "u") 
        .setProjection(Projections.property("u.id")); 
+0

我不會對正在使用OneToOne關係產生colunm USER_ID標準。我沒有設置並獲取userId柱子的方法。 – 2013-03-08 05:52:46

相關問題