我正在开发一个 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;
}
在 contact dao 中,我使用以下代码获取联系人列表:
Session session = sessionFactory.getCurrentSession();
Criteria criteria = session.createCriteria(ContactModel.class);
criteria.addOrder(Order.asc("contactName"));
return criteria.list();
现在我需要在联系人主页上显示联系人列表,其中将显示联系人姓名及其相应的位置名称。
要显示联系人列表,我需要在联系人和位置表中创建联接。这是正确的方法吗?我们如何在 hibernate 状态下做到这一点?
这也是在联系人实体中添加位置实体的正确方法,还是我必须在联系人中使用位置模型?
最佳答案
您必须将两个实体与关系关联起来。我假设 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对象来获取 Controller 中的位置值,就像您通过ClassName.Fieldname获取普通变量一样。这里它将为您提供一个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 等来进一步增强这种 onetoone 关系。 注意:假设您的模型中有 getter 和 setter
关于java - 在另一个模型中获取模型列表的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28009032/