2014-04-01 95 views
0

我有几个数据库表:Hibernate对象的映射问题

User (user_id, firstName, lastName) 

Product (id, name, user_id) 

user_id在这里充当外键。

我有几个类如下。

public class User { 

    @Id 
    @Column(name = "user_id") 
    private int user_id; 

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

    @Column(name = "lastName") 
    private String lastName; 
    /*getters setter are omitted.*/ 
} 

&另一个是

public class Product { 
    @Id 
    @Column(name = "id") 
    private int id; 

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

    @Column(name = "packing") 
    private int packing; 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "user_id") 
    private User user; 

    public User getUser() { 
     return this.user; 
    } 

    public void setUser(User us) { 
     this.user = us; 
    } 
     /* other getters setter are omitted.*/ 
} 

ProductDao.java类有此查询:

List<Product> list = new ArrayList<Product>(); 
Iterator<?> products = session.createQuery(" SELECT id, name, user FROM Product ") .list().iterator(); 

如果我从这个查询中删除user,它工作得很好(但不取user的用户详细信息)

请指点我失踪的地方,以获取具体的user的所有细节。

回答

0

您正在发出常规SQL查询,而您可能想要发出HQL或JPQL查询。最重要的区别是,虽然SQL在DB列上运行,但HQL在实体上运行。由于Product表中没有user列,因此不会得到期望的结果。

请试试这个:SELECT p FROM Product p

如果您明确只想要映射的属性而不是实体本身,请尝试使用 SELECT p.id, p.name, p.user FROM Product p。请注意,由于HQL在实体上运行,因此您需要点运算符,并且可以使用字段名称而不是列名称。

+0

谢谢你的帮助。它显示了所有来自'Product'但是'user'的数据。 我仍然无法获取'user'的数据。 – Zeeshan

+0

原因可能是延迟加载。用户字段是否为null或者您是否获得Exception?您是否正在访问交易中的字段?您是否试图通过将注释更改为'FetchType.EAGER'或将'LEFT JOIN FETCH'添加到查询来急切地提取用户? – kostja

+0

我正在调试中获取用户字段'null'。 是的,我也尝试过使用EAGER和LAZY。 我在调试模式下看到'user = null',但是当我打印对象(转换成JSON)时,它不显示'user'字段。 – Zeeshan