热得到具有Hibernate的对象列表,当实体映射为多对一

时间:2016-05-11 21:30:56

标签: java hibernate

我有一个班级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字段获取联系人列表?

2 个答案:

答案 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