开发者

Mapping Hashmap of Coordinates in Hibernate with Annotation

I've just started using hibernate and I'm trying to map walking distance between two coordinates into a hashmap, There can be many connections from one "FromCoordinate" to another "ToCoordinate". I'm not sure if i've implemented this correctly, What annotations do i need to map this MashMap? Thanks

HashMap> coordWalkingConnections = 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   开发者_JAVA技巧-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)}>


Well in my opinion you have to use the interface type of collection in initialization.

Instead of:

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

use:

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

If you read the hibernate documentation at: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/collections.html you will read:

The actual interface might be java.util.Set, java.util.Collection, java.util.List, java.util.Map, java.util.SortedSet, java.util.SortedMap or anything you like ("anything you like" means you will have to write an implementation of org.hibernate.usertype.UserCollectionType.)

Notice how the instance variable was initialized with an instance of HashSet. This is the best way to initialize collection valued properties of newly instantiated (non-persistent) instances. When you make the instance persistent, by calling persist() for example, Hibernate will actually replace the HashSet with an instance of Hibernate's own implementation of Set. Be aware of the following errors:

I do not know if this is the only error. Hope this would help you.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜