2013-05-27 81 views
1

我想將db放入一個具有java.awt.geom.Point2D字段的類。可能嗎?針對基類java的Hibernate註釋

這是我的代碼。

@Entity 
@Table(name = "my_class_table") 
public class MyClass { 
    private String aliasId; 

    private Point2D field; 

    public Point2D getField() { 
    return field; 
    } 

    public void setFieldPoint2D field) { 
    this.field = field; 
    } 

    public String getAliasId() { 
    return aliasId; 
    } 

    public void setAliasId(String aliasId) { 
    this.aliasId = aliasId; 
    } 
} 

和被拋出的異常的原因:

無法確定類型:java.awt.geom.Point2D中,在表:my_class_table,爲列:[org.hibernate.mapping。列(字段)]

當然,原因很明顯。我的問題是:我應該如何註釋該類能夠使用Point2D類的字段?它有可能嗎?

回答

0

謝謝各位回覆。不幸的是java.awt.Point班使用Integer,所以這對我來說沒用。解決這個問題的最簡單方法是使用Point2D.Double,它實現了Serializable(但是如果你不想改變類定義,則定義UserTypeCompositeUserType更方便)。所以,簡單的解決方案:

@Entity 
@Table(name = "my_class_table") 
public class MyClass { 
    private String aliasId; 

    private Point2D.Double field; 

    public Point2D.Double getField() { 
    return field; 
    } 

    public void setField(Point2D.Double field) { 
    this.field = field; 
    } 

    public String getAliasId() { 
    return aliasId; 
    } 

    public void setAliasId(String aliasId) { 
    this.aliasId = aliasId; 
    } 
} 

但我最終的目標是創建一個有序列表點的類。如果有人對此感興趣,這裏是一個代表線的例子:

@Entity 
public class Line { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "idDb", unique = true, nullable = false) 
    private int id; 

    @ElementCollection 
    @CollectionTable(name="points_table", joinColumns = @JoinColumn(name="idDb")) 
    @IndexColumn(name = "idx") 
    @Column(name="point_val") 
    private List<Point2D.Double> points = new ArrayList<Point2D.Double>(); 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public List<Point2D.Double> getPoints() { 
     return points; 
    } 

    public void setPoints(List<Point2D.Double> points) { 
     this.points = points; 
    } 
} 
1

最簡單的方法是使用延伸Point2D並且是Serializable類的java.awt.Point。這樣休眠會自動映射它與SerializableType,你不需要再做任何事情。 point對象將以序列化形式保存在blob數據庫表列中。

您還可以選擇爲Point2D類定義自定義休眠類型。 Here is a link如何定義一個自定義的hibernate類型。