java - 在另一个模型中获取模型列表的正确方法

标签 java database hibernate

我正在开发一个 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/

相关文章:

java - 如何从 AsyncTask<Void, Void, JSONObject> 获取 JSON 对象数据?

java - Maven:是否可以在另一个项目的编译范围中包含一个测试 jar

java - 运行主类时出现 org.apache.openjpa.persistence.ArgumentException

android - 在android上保存多个图像文件的位置

java - 为什么我无法收听录音文件内容

java - 可以在android上使用jdbc驱动吗?

java - 监视共享文件夹的更改并拉取到数据库

spring - 如果没有主键,则使用 spring data jpa 存储库

java - 无法添加或更新子行: a foreign key constraint fails using Hibernate Framework

java - org.hibernate.tuple.AbstractEntityTuplizer.createProxy 中的空指针异常