Отображение Hashmap для координат в Hibernate с аннотацией - PullRequest
3 голосов
/ 16 апреля 2010

Я только начал использовать hibernate и пытаюсь отобразить расстояние между двумя координатами в хэш-карту. Может быть много соединений от одной «FromCoordinate» к другой «ToCoordinate». Я не уверен, правильно ли я это реализовал. Какие аннотации мне нужны для отображения этой MashMap? Спасибо

HashMap >ordinWalkingConnections = new HashMap> ();

@Entity
@Table(name = "COORDCONNECTIONS")
public class CoordinateConnection implements Serializable{

    private static final long serialVersionUID = -1624745319005591573L;

    /** auto increasing id number */
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID")
    @id
    private int id;

    @Embedded
    public FromCoordinate fromCoord;

    @Embedded
    public ToCoordinate toCoord;


HashMap<FromCoordinate, ArrayList<ToCoordinate >> coordWalkingConnections = new HashMap<FromCoordinate, ArrayList<ToCoordinate >>();

}

public class FromCoordinate implements ICoordinate
{
    @Column(name = "FROM_LAT")
    private double latitude;

    @Column(name = "FROM_LNG")
    private double longitude;
}

public class ToCoordinate implements ICoordinate
{

    @Column(name = "TO_LAT")
    private double latitude;

    @Column(name = "TO_LNG")
    private double longitude;

    @Column(name = "DISTANCE")
    private double distance;
}

DATABASE STRUCTURE
id  FROM_LAT    FROM_LNG    TO_LAT      TO_LNG      Dist
1   43.352669   -6.264341   43.350012   -6.260653   0.38
2   43.352669   -6.264341   43.352669   -6.264341   0.00
3   46.352669   -6.264341   43.353373   -6.262013   0.17
4   47.352465   -6.265865   43.351290   -6.261200   0.25
5   45.452578   -6.265768   43.352788   -6.264396   0.01
6   45.452578   -6.265768   45.782788   -6.234523   0.01
    .....
    ...
    .

Example HashMap for HashMap<Coordinate, ArrayList<Coordinate>>


<KEY{43.352669  -6.264341}, Arraylist VALUES{(43.350012,-6.260653,0.383657),  (43.352669, -6.264341, 0.000095), (43.353373, -6.262013,  0.173201)}>
<KEY{47.352465  -6.265865}, Arraylist VALUES{(43.351290,-6.261200,0.258781)}>
<KEY{45.452578  -6.265768}, Arraylist VALUES{(43.352788,-6.264396,0.013726),(45.782788,-6.234523,0.017726)}>

1 Ответ

0 голосов
/ 20 октября 2011

Ну, на мой взгляд, вы должны использовать интерфейс типа коллекции при инициализации.

Вместо:

HashMap<FromCoordinate, ArrayList<ToCoordinate >> coordWalkingConnections = new HashMap<FromCoordinate, ArrayList<ToCoordinate >>();

использование:

Map<FromCoordinate, List<ToCoordinate >> coordWalkingConnections = new HashMap<FromCoordinate, ArrayList<ToCoordinate >>();

Если вы читаете документацию по спящему режиму по адресу: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/collections.html, вы прочтете:

Фактический интерфейс может быть java.util.Set, java.util.Collection, java.util.List, java.util.Map, java.util.SortedSet, java.util.SortedMap или все что угодно («все что угодно» означает вам придется написать реализацию org.hibernate.usertype.UserCollectionType.)

Обратите внимание, как переменная экземпляра была инициализирована с экземпляром HashSet. Это лучший способ инициализации ценной коллекции свойства вновь созданных (непостоянных) экземпляров. Когда ты сделать экземпляр постоянным, вызывая persist (), например, Hibernate фактически заменит HashSet экземпляром Реализация Set в Hibernate. Знать о следующем Ошибки:

Я не знаю, является ли это единственной ошибкой. Надеюсь, это поможет вам.

...