我们说我有一个对象Car
,其中包含List<Wheel>
。我有四个车轮位置,每个位置可以带一个或没有车轮。我使用@ManyToMany
对其进行了建模,因为这是特定情况所必需的。
Car
:
@Entity
public class Car implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name="CAR_WHEEL", joinColumns=@JoinColumn(name="CAR_ID", referencedColumnName="ID"),
inverseJoinColumns = @JoinColumn(name = "WHEEL_ID", referencedColumnName = "ID"))
private List<Wheel> wheels;
// constructors, getters, setters ...
}
Wheel
:
@Entity
public class Wheel implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@ManyToMany(mappedBy="wheels")
private List<Car> cars;
// constructors, getters, setters ...
}
在我看来,我将轮子保存到列表中的特定位置。例如,如果您有以下关系:
位置1:第3轮
位置2:无轮
位置3:轮1
位置4:无轮
列表如下所示:[my.model.Wheel@fbc9ffe, null, my.model.Wheel@3d14ead8, null]
。
在保存WHEEL_POSITION
之后,我现在希望有一个表Car
,如下所示:
WHEEL_POSITION
id wheel position
1 3 0
2 null 1
3 1 2
4 null 3
该位置是列表中Wheel
- 对象的索引。
我如何继续,以便此表由JPA创建?
答案 0 :(得分:0)
解决方案是,向实体@OrderColumn
添加Car
注释(感谢Neil Stockton):
@Entity
public class Car implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name="CAR_WHEEL", joinColumns=@JoinColumn(name="CAR_ID", referencedColumnName="ID"),
inverseJoinColumns = @JoinColumn(name = "WHEEL_ID", referencedColumnName = "ID"))
@OrderColumn
private List<Wheel> wheels;
// constructors, getters, setters ...
}
它在表格中添加了一个新列。