我想在db中放入一个有java.awt.geom.Point2D字段的类。有可能吗?
这是我的代码。
@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.Column(field)]
当然,原因很明显。我的问题是:我应该如何注释类以便能够使用Point2D类的字段?它有可能吗?
答案 0 :(得分:1)
最简单的方法是使用java.awt.Point
扩展Point2D
并且是Serializable
类。这样,hibernate会自动将其映射到SerializableType
,您不需要再做任何事情。 point
对象将以序列化形式保存在blob
数据库表列中。
您还可以选择为Point2D
类定义自定义hibernate类型。 Here is a link如何定义自定义hibernate类型。
答案 1 :(得分:0)
您无法向现有类添加注释。
但是你can define a CompositeUserType
告诉Hibernate如何映射Point2D
。
答案 2 :(得分:0)
谢谢你的回复。不幸的是java.awt.Point
班级使用Integer
,所以在我的案例中它没用。解决问题的最简单方法是使用Point2D.Double
来实现Serializable
(但如果您不想改变,UserType或CompositeUserType的定义会更方便类定义)。所以,简单的解决方案:
@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;
}
}