您好我有一个场景,我需要在从数据库加载记录时加载第三级域对象。 这是我的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获取定义。 不知怎的,我必须在标准本身做。
这意味着我不允许像这样定义Property表:
@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
.............
}
答案 0 :(得分:0)
您是否尝试为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);