java - 当实体映射为多对一时,使用 Hibernate 热获取对象列表

标签 java hibernate

我有一个类User,其中包含联系人列表 用户类别:

@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;
    ...
    ...
}

联系类(class):

@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 字段获取联系人列表?

最佳答案

不确定我是否得到了你想要的...

只需通过 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();

关于java - 当实体映射为多对一时,使用 Hibernate 热获取对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37173620/

相关文章:

java - hibernate 中索引和@NaturalId 的区别

java - 如何在构造函数接受类的情况下使用 Guice `Module` 进行注入(inject)?

java - 错误 ORA-01000 : maximum open cursors exceeded

java - 在 varnish 后面使用 reSTLet 时出错(反向代理)

java - Hibernate Parent级联删除单向子错误

Java Hibernate @OneToMany 标准投影返回 NULL

java同步和对象锁

Java:无法创建新的 native 线程

java - spring-data-jpa: ORA-01795: 列表中表达式的最大数量为 1000

java - 在 Spring MVC 中,使用 HQL JOIN 我多次获得相同的数据