我认为我有一个相当简单的架构,但我无法找到正确的映射方式。
@Entity
class Satellite {
@Id
private int id;
// stuff
@ElementCollection @OrderBy(value = "orbit asc")
private List<DataModel> dataModel;
}
可嵌入类如下:
class DataModel {
private int orbit;
private int data;
}
问题是,每个卫星的轨道应该是唯一的。在我看来,表示datamodel的表具有由卫星id和轨道组成的复合主键。但我无法找到正确的映射方式。如果我将DataModel声明为普通实体,我必须添加一个映射到manytoone的卫星字段和一个包含卫星和轨道的复合主键,但它不起作用(堆栈溢出!!)。
我使用hibernate作为持久性提供程序。
答案 0 :(得分:0)
如果我将DataModel声明为普通实体,我必须添加一个映射到manytoone的卫星字段和一个包含卫星和轨道的复合主键。
在数据库级别上你必须这样做,即包含DataModel
的表需要卫星的外键。在这种情况下,我没有理由不让DataModel
成为一个实体:
@IdClass( DMKeyClass.class )
@Entity
class DataModel {
@Id
private Satellite sat;
@Id
private int orbit;
private int data;
}
class DMKeyClass {
public int sat;
public int orbit;
}