我正在使用spring mvc应用程序,其中有2个实体,联系人和位置。以下是我的联系方式和位置信息模型:
@Entity
@Table(name="Contact")
public class ContactModel {
@Id
@Column(name="contactid")
@GeneratedValue
private int contactId;
@Column(name="contactname")
private String contactName;
@Column(name="contactemail")
private String email;
@Column(name="contactphone")
private String phone;
@Column(name="locationid")
private int locationId;
}
位置模型:
@Entity
@Table(name="Location")
public class LocationModel {
@Id
@Column(name="locationid")
@GeneratedValue
private int locationId;
@Column(name="locationname")
private String locationName;
@Column(name="locationdesc")
private String locationDescription;
@Column(name="type")
private String locationType;
@Column(name="address")
private String address;
@Column(name="city")
private String city;
@Column(name="state")
private String state;
@Column(name="district")
private String district;
@Column(name="lattitude")
private String lattitude;
@Column(name="longitude")
private String longitude;
}
在联系人dao中,我使用以下代码获取联系人列表:
Session session = sessionFactory.getCurrentSession();
Criteria criteria = session.createCriteria(ContactModel.class);
criteria.addOrder(Order.asc("contactName"));
return criteria.list();
现在,我需要在联系人主页上显示联系人列表,其中将显示联系人姓名及其对应的位置名称。
要显示联系人列表,我需要在联系人和位置表中创建联接。这是正确的方法吗?我们如何在冬眠中做到这一点?
还是在联系人实体中添加位置实体的正确方法,还是我必须在联系人中使用位置模型?
最佳答案
您必须将两个实体都与关联关联。我假设ContactModel与LocationModel具有一对一关联
将您的ContactModel更改为
@Entity
@Table(name="Contact")
public class ContactModel {
@Id
@Column(name="contactid")
@GeneratedValue
private int contactId;
@Column(name="contactname")
private String contactName;
@Column(name="contactemail")
private String email;
@Column(name="contactphone")
private String phone;
@OneToOne
@Column(name="locationid")
private LocationModel location;
}
并与您做的其他事情一样,仅选择ContactModel List对象。
public List<ContactModel> allContactModel(){
Session session = sessionFactory.getCurrentSession();
Criteria criteria = session.createCriteria(ContactModel.class);
criteria.addOrder(Order.asc("contactName"));
return criteria.list();
}
并通过遍历列表ContactModel并在ContactModel中获取LocationModel对象的位置值,在通过ClassName.Fieldname.Fetch提取普通变量时从ContactModel中获取LocationModel对象,此处它将为您提供LocationModel对象
List<ContactModel> mylist=ContactModel.allContactModel();
for(ContactModel cm: mylist){
LocationModel lm=ContactModel.getLocationModel();
System.out.println(cm.getContactName+" location is "+lm.getLocationName);
}
现在有了LocationModel,您还可以获取其进一步的值。
您还可以通过根据需要指定fetchtype,cascadetype等来进一步增强这种一对一的关系。
注意:假设您的模型中有吸气剂和吸气剂