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