我有实体类
@Entity
@Table(name = "city")
//@IdClass(CityId.class)
public class City implements Serializable{
@EmbeddedId
private Location location;
@Id
@Column(name = "citycode", nullable = false)
private String cityCode;
@Column(name="countrycode" ,insertable = false,updatable = false)
private String countryCode;
@Column(name="name")
private String name;
@Embeddable
public static class Location implements Serializable {
@Column(name="latitude",nullable = false)
private BigDecimal latitude;
@Column(name="longitude",nullable = false)
private BigDecimal longitude;
public Location(BigDecimal latitude, BigDecimal longitude) {
this.latitude = latitude;
this.longitude = longitude;
}
}
当我运行应用程序时,我得到这个错误这个类[class com. *. entity.City]没有定义一个IdClass
因此,我启用了@IdClass(CityId.class),但没有删除位置的@EmbeddedId。
我的id类是这样的
public class CityId {
private String cityCode;
private City.Location location;
public CityId(String cityCode, City.Location location) {
this.cityCode = cityCode;
this.location = location;
}
// --- equlas , hashcode()
我得到这个错误:
无法在类[com. *. entity. City]上找到字段名[latitude]
要解决这个问题,我必须从实体中删除@EmbeddedId和@Embedded,并定义经度和纬度列。
但是countryCode是外键,latitude和longitude是表中的复合主键
CREATE TABLE city (
name varchar2(25) not null,
Lattitude DECIMAL(10) not null,
longitude DECIMAL(10) not null,
countryCode varchar2(3) not null,
CONSTRAINT loc_pk
PRIMARY KEY(latitude,longitude),
CONSTRAINT countrycode_fk
FOREIGN KEY(countryCode)
REFERENCES country(iso3)
);
如果我不将@Id与countryCode一起使用,它将不允许我将其用作外键。
我的问题是我应该用什么
1.@EmbeddedId方法
1.@身份类别
1.或者有没有其他的方法可以使我不必将外键与主键组合在一起
1条答案
按热度按时间dgiusagp1#
使用
@EmbeddedId
方法,不能将其与@IdClass
混合使用