【问题标题】:Hibernate ObjectNotFoundException, even if records are present in tableHibernate ObjectNotFoundException,即使表中存在记录
【发布时间】:2015-01-31 12:49:08
【问题描述】:

我正在开发一个 Spring MVC 应用程序,其中有两个模型类: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;

    @ManyToOne
    @JoinColumn(name="locationid")
    private LocationModel locationModel;
}

@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="state")
    private String state;

    @Column(name="circle")
    private int circle;

    @Column(name="district")
    private int district;

    @Column(name="town")
    private int town;

    @Column(name="lattitude")
    private String lattitude;

    @Column(name="longitude")
    private String longitude;

    @Column(name="locationuid")
    private String locationUID;

    @Column(name="category")
    private String category;

    @Column(name="bedcount")
    private int bedCount;

    @OneToMany(mappedBy = "locationModel", fetch = FetchType.EAGER)
    private List<ContactModel> contactList;
}

位置表中的主键是联系表中的外键。我在联系人表中有 2 条记录,位置 ID 为 0。

我正在使用以下代码获取联系人列表:

Session session = sessionFactory.getCurrentSession();
            Query query = session
                    .createQuery("from ContactModel where contactName like :contactName");
            return query.setParameter("contactName", contactName + "%").list();

但它显示异常:

Error performing load command : org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [com.bizmerlin.scm.model.LocationModel#0]
17:03:31,135 ERROR [stderr] (http--127.0.0.1-9090-2) org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [com.bizmerlin.scm.model.LocationModel#0]

17:03:31,139 ERROR [stderr] (http--127.0.0.1-9090-2)    at org.hibernate.internal.SessionFactoryImpl$1$1.handleEntityNotFound(SessionFactoryImpl.java:247)

17:03:31,141 ERROR [stderr] (http--127.0.0.1-9090-2)    at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:214)

17:03:31,143 ERROR [stderr] (http--127.0.0.1-9090-2)    at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:264)

可能是因为位置表没有位置 id 为 0 的记录。如果是这样,我如何获取联系人列表,即使他们的位置为空?

【问题讨论】:

    标签: mysql hibernate spring-mvc


    【解决方案1】:

    使用可选属性

    @ManyToOne(optional=true)
    @JoinColumn(name="locationid")
    private LocationModel locationModel;
    

    http://learningviacode.blogspot.in/2011/12/one-to-many-assocition-that-is-optional.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-02
      • 2013-03-16
      • 2015-12-13
      • 2015-01-26
      • 2017-11-29
      • 1970-01-01
      相关资源
      最近更新 更多