2013-05-27 106 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类型。