class User{
int id;
String firstName;
String lastName;
List<Address> address ;
}
class Address{
int id;
String city;
String state;
}
我想使用休眠条件或HQL从Address类加载部分数据。在这种情况下,我只想从Address类加载地址ID和状态。我意识到我可以使用投影来部分加载数据,但是我不知道该如何处理地址类。
Criteria criteria = session.createCriteria(User.class);
criteria.setProjection(Projections.projectionList()
.add(Projections.property("id"),"id")
.add(Projections.property("firstName"),"firstName")
.add(Projections.property("address"),"address")
如果我尝试使用投影来限制Address类中的数据加载
.add(Projections.property("address.id"),"address.id")
由于用户类中没有对象address.id,我得到了错误。在此方面,我将不胜感激。
答案 0 :(得分:0)
您可以创建一个新类,例如AddressId,该类仅包含Long属性。将此新类正确映射到地址表。将AddressId列表添加到User类。使用投影加载此新列表,而不是其他列表。
答案 1 :(得分:0)
我使用休眠查询语言(HQL)来获得所需的结果。
首先,我实例化用户类并添加了一个新的构造函数,如下所示
List<User> userList = new ArrayList<User>();
try {
session = HibernateUtil.getSession();
String hql = "select new User(user.id, user.firstName, user.address.id, user.address.state "
+ "from User user where user.id in (:userIdList) ";
Query q = session.createQuery(hql);
q.setParameterList("userIdList",userIdList);
userList=q.list();
session.flush();
}
然后我们需要将User的构造函数更新为:
public User(int id, String firstName, int addressId, String state) {
this.id = id;
this.firstName = firstName;
this.address = new Address();
this.address.setState(state);
this.address.setId(addressId);
这只会加载我们想要的数据。