我正在开发一个spring mvc app,其中有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();
现在我需要在联系主页上显示联系人列表,其中会显示联系人姓名及其相应的位置名称。
要显示联系人列表,我需要在联系人和位置表中创建联接。这是正确的方法吗?我们怎么能在休眠中做到这一点?
这也是在联系人实体中添加位置实体的正确方法,还是我必须在联系中使用位置模型?
答案 0 :(得分:1)
你必须将你的两个实体与关系联系起来。我假设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获取控制器中的位置值,并在通过ClassName.Fieldname.Here获取正常变量时从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等来进一步增强此onetoone关系。 注意:假设你的模型中有getter和setter
答案 1 :(得分:0)
我认为正确的方法是联系人可以拥有一个位置,现在为您的联系人添加一个位置对象,如下所示:
@Entity
@Table(name="Contact")
public class ContactModel {
...
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
@JoinColumn(name = "locationid", nullable = false)
private LocationModel location;
// can be removed
@Column(name="locationid")
private int locationId;
...
}
如果你有这个,你在拨打联系人记录时会得到位置对象