【问题标题】:Hibernate EAGER fetchingHibernate EAGER 获取
【发布时间】:2014-03-07 09:45:09
【问题描述】:

您好,我有一个场景,我需要在从数据库加载记录的同时加载第三级域对象。 这是我的 senario 的示例: 有三个域类USER、PROPERTY、CONTACT

@Entity
@Table(name="user")
public class USER{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
     @Column(name = "id")
     private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="PROP_ID", insertable=false, updatable=false)
    private Property property;
    ............
    other fields and getter and setter methdos
    .............
   }

   @Entity
   @Table(name="properties")
   public class Property{
        @Id
        @GeneratedValue(strategy=GenerationType.AUTO)
        private Long id;

       @OneToOne(mappedBy="property", fetch=FetchType.Lazy)
       @JoinColumn(name="CONTACT_ID")
       private Contact contact;
       ............
       other fields and getter and setter methdos
       .............
   }

 @Entity
@Table(name = "contact")
public class Contact{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@Column(name = "ADDRESS1",length = 255)
private String address1;
@Column(name = "ADDRESS2",length = 255)
private String address2;
     ............
       other fields and getter and setter methdos
       .............
   }

有我的域类,我在获取 USER 记录时尝试获取联系方式。 我可以通过使用 JOIN 获取模式获取属性记录,但我不知道如何获取第三级记录。

这是我的查询供参考:

        DetachedCriteria criteria = DetachedCriteria.forClass(USER.class);
        criteria.setFetchMode("property", FetchMode.JOIN);
        List<USER> users = getHibernateTemplate().findByCriteria(criteria);

在这里,我可以在执行 JOIN 查询时获取属性对象。 但我也想要 Contact 对象和 Property 对象。

请注意,我不允许对完整域本身使用 EAFER 提取定义。 不知何故,我必须在标准本身做。

这意味着我不能像这样定义属性表:

@Entity
   @Table(name="properties")
   public class Property{
        @Id
        @GeneratedValue(strategy=GenerationType.AUTO)
        private Long id;

       @OneToOne(mappedBy="property", fetch=FetchType.EAGER)
       @JoinColumn(name="CONTACT_ID")
       private Contact contact;
       ............
       other fields and getter and setter methdos
       .............
   }

【问题讨论】:

    标签: java hibernate hql


    【解决方案1】:

    您是否尝试为 property.contact 添加另一个 fetchmode ?

    DetachedCriteria criteria = DetachedCriteria.forClass(USER.class);
    criteria.setFetchMode("property", FetchMode.JOIN)
    criteria.setFetchMode("property.contact", FetchMode.JOIN);
    List<USER> users = getHibernateTemplate().findByCriteria(criteria);
    

    【讨论】:

      猜你喜欢
      • 2010-11-08
      • 2011-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-12
      • 2018-11-16
      • 2017-08-22
      • 1970-01-01
      相关资源
      最近更新 更多