Spring Boot 是否可以将@EmbeddedId与@IdClass一起使用

2nbm6dog  于 2023-03-02  发布在  Spring
关注(0)|答案(1)|浏览(137)

我有实体类

@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.或者有没有其他的方法可以使我不必将外键与主键组合在一起

dgiusagp

dgiusagp1#

使用@EmbeddedId方法,不能将其与@IdClass混合使用

相关问题