Hibernate对象映射问题

时间:2014-04-01 12:35:28

标签: hibernate mapping hql

我有几个数据库表:

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的所有详细信息。

1 个答案:

答案 0 :(得分: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对实体进行操作,因此您需要使用点运算符,并且可以使用字段名称而不是列名称。