我有一个班级User
,其中包含Contacts
的列表
用户类:
@Entity
@Table(name = "profile")
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(unique = true)
private String login;
@OneToMany(mappedBy = "owner", cascade = CascadeType.ALL)
private List<Contact> contacts;
...
...
}
联系班级:
@Entity
@Table
public class Contact implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@ManyToOne
@JoinColumn(name = "user_profile_id")
private User owner;
...
...
}
我如何通过User.id字段获取联系人列表?
答案 0 :(得分:0)
不确定我得到了你想要的东西......
只需通过ID查找用户,您就可以获得他/她的联系人。但是,该集合将被延迟加载,当您致电getContacts()
或Hibernate.initialize(user.getContacts())
时,列表将被真正加载。如果您不想延迟加载,请在@OneToMany中将FetchMode更改为EAGER ...
例如,使用HQL查询:
String hql = "from User where id = :userid";
Query query = session.createQuery(hql);
query.setInteger("userid", myUserIdIWantContacts);
User user = (User) query.uniqueResult();
或标准:
Criteria cr = session.createCriteria(User.class);
cr.add(Restrictions.eq("id", myUserIdIWantContacts));
User user = (User) cr.uniqueResult();
答案 1 :(得分:0)
Contact
有一个与User
关联的外键列,因此您无需使用连接
from Contact where owner.id = :userId
请不要使用int id
之类的原始类型,而是使用Integer id
。