休眠。 Session.get(type,id)返回null

时间:2016-03-30 13:55:26

标签: java mysql hibernate session get

我的项目中遇到Hibernate问题。 Session.get()方法返回null,尽管具有所需id的对象确实存在于数据库中。

Long geocodedLocationId = geocoderService.geocode(latitude, longitude);
GeocodedLocation geocodedLocation = (geocodedLocationId != null) ? geocodedLocationService.read(geocodedLocationId) : null;

第一行是使用RMI调用GeocoderService,GeocoderService对纬度/经度进行地理编码,并创建一个保存在表格中的GeocodedLocation对象" geocoded_locations"。

在此之后,如果GeocoderService返回了一个ID,我们将从数据库加载该对象并使用它。

问题是GeocoderService返回ID,但Hibernate无法通过数据库中的id找到对象。

但是当我再次以相同的纬度和经度运行程序时,它返回相同的ID,并且Hibernate能够在数据库中找到该对象。因此,最近创建的GeocodedLocations失败了。

我尝试在第一行之后立即停止调试器。所以我可以检查返回的ID,并在mysql中检查它,所以我看到所需的对象确实存在。但是当我尝试通过ID加载它时,Hibernate无法做到(所以我认为问题不在于GeocoderService没有刷新会话,因为我可以看到GeocodedLocation已经已保存到数据库中。

其他信息: read()方法实现:

@Override
public T read(PK id) {
    T returnValue = (T) factory.getCurrentSession().get(type, id);
    return returnValue;
}

"类型"是GeocodedLocation.class," id"是一个很长的价值。

尝试按id获取对象时正在执行的查询如下:

 Hibernate: 
    /* load com.my.domain.businessObjects.GeocodedLocation */ select
        geocodedlo0_.id as id30_0_,
        geocodedlo0_.building_number_name as building2_30_0_,
        geocodedlo0_.street as street30_0_,
        geocodedlo0_.town_city as town4_30_0_,
        geocodedlo0_.region as region30_0_,
        geocodedlo0_.postcode as postcode30_0_,
        geocodedlo0_.state as state30_0_,
        geocodedlo0_.country as country30_0_ 
    from
        db_production.geocoded_locations geocodedlo0_ 
    where
        geocodedlo0_.id=?

0 个答案:

没有答案