我正在使用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等来进一步增强这种一对一的关系。
注意:假设您的模型中有吸气剂和吸气剂

10-06 01:17