0

我有 3 个实体:

  1. Poi 实体
  2. 一个 PolygonPoi 实体,它通过联合继承类型从 Poi 实体(也是 @Id)继承。
  3. 以及通过多对关系(1-PolygonPoi N-Coordinates)连接到多边形 poi 的坐标实体

我的问题是我无法为 Coordinate 实体获取正确的外键(我只得到空值)。坐标应使用 Poi 的 Id。我该如何解决 ??

以下是提到的三个实体类:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Poi
{
    @Id
    @Column(name = "NAME")
    protected String name;

@Entity
public class PolygonPoi extends Poi
{
    @OneToMany(mappedBy = "poi", cascade={CascadeType.ALL})
    protected List<Coordinate> coordinate = new ArrayList<Coordinate>();

@Entity
public class Coordinate
{
    @Id
    @GeneratedValue
    private long id;

    @ManyToOne  
    Poi poi;

此外,最好完全在数据库中使用 PolygonPoi,因为它除了与坐标的关系之外不包含任何信息。

E:

这是我的表格的样子:

SELECT * FROM POI;
NAME    CREATEDBY  
pp0     1

SELECT * FROM POLYGONPOI;
NAME  
pp0

SELECT * FROM COORDINATE ;
ID      LATITUDE            LONGITUDE           POI_NAME  
1       |30.030000686645508 |50.29999923706055  |null
2       |31.030000686645508 |51.29999923706055  |null
3       |31.030000686645508 |50.29999923706055  |null
4

1 回答 1

0

除非您指定 @JoinColumn 注释并定义外键列,否则 JPA 将默认使用 Coordinate 表中的“poi_NAME”字段作为 Coordinate ->Poi 关系的 Poi.NAME 的外键。这将使用引用的 poi 实例中包含的名称值进行设置。如果引用的 poi 没有设置名称 - 您的应用程序负责将其分配为 Poi 实体(或子类)不能在没有 ID 的情况下存在。

于 2013-09-23T15:06:27.933 回答