我对JPA注释有疑问。我有2节课
@Entity(name="CITY")
@Table(name="CITY")
@SequenceGenerator(name="seqCITY", initialValue=0, allocationSize=1)
public class CITY{
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seqCITY")
private int num;
private String libelle;
@OneToMany
private List<Distance> listDistanceCity;
}
和
@Entity(name="DISTANCE")
@Table(name="DISTANCE")
public class Distance {
@Id
private int num;
@ManyToOne
@JoinColumn(name = "fk_city1")
private City city1;
@ManyToOne
@JoinColumn(name = "fk_city2")
private City city2;
private float distance;
}
如果我想表达两个城市之间的距离,这些注释正确吗?例如,从纽约到曼哈顿,旧金山,洛杉矶有距离。距离是由2个城市组成。
数据库中有一组固定的城市,不会有任何插入或更新。
查看代码,这看起来不错,但是正如我所看到的,您将在表中拥有一个复合键,因为相同的城市组合不应再次重复。在这种情况下,您可以通过以下方式在模型中定义它]
@Entity public class City { @Id private int num; }
创建可用于实施唯一性的可嵌入密钥
@Embeddable public class CitySet implements Serializable { @ManyToOne @JoinColumn(name = "fk_city1") private City city1; @ManyToOne @JoinColumn(name = "fk_city2") private City city2; }
在最后一堂课中与您的ID一起使用相同的键
@Entity(name="DISTANCE") @Table(name="DISTANCE") @IdClass(CitySet.class) public class Distance { @Id @GeneratedValue(strategy = GenerationType.AUTO) private int num; @Id private City city1; @Id private City city2; private float distance; }
希望这会有所帮助