我想制作一张桌子,假设桌子的名字是 Car。它将有 3 列brandId
,typeId
和sizeId
。我希望所有的列都是主键。typeId
并且sizeId
是来自不同表的列。我已经尝试编写代码,但是如果我@Id
为每一列使用注释,则会出现错误“未找到超类型”。
代码如下。
@Entity
@Table(name = "CAR")
public class Car implements Serializable {
private static final long serialVersionUID = -1576946068763487642L;
@Id
@Column(name = "BRAND_ID", nullable = false, length = 20)
private String brandId;
@Id
@ManyToOne
@JoinColumn(name = "TYPE_ID", nullable = false)
private TypeId typeId;
@Id
@ManyToOne
@JoinColumn(name = "SIZE_ID", nullable = false)
private SizeId sizeId;
public String getBrandId() {
return brandId;
}
public void setBrandId(String brandId) {
this.brandId= brandId;
}
public TypeId getTypeId() {
return typeId;
}
public void setTypeId (TypeId typeId) {
this.typeId= typeId;
}
public SizeId getSizeId() {
return sizeId;
}
public void setSizeId (SizeId sizeId) {
this.sizeId= sizeId;
}
}
所以,我在谷歌搜索,发现我可以@EmbeddedId
用来创建复合主键。实体的代码是这样的:
@Entity
@Table(name = "CAR")
public class Car implements Serializable {
private static final long serialVersionUID = -1576946068763487642L;
@EmbeddedId
private CarPk carPk;
public CarPk getCarPk () {
return carPk ;
}
public void setCarPk (CarPk carPk ) {
this.carPk = carPk ;
}
}
和可嵌入类:
@Embeddable
public class CarPk implements Serializable {
private static final long serialVersionUID = -83738833L;
@Column(name = "BRAND_ID", nullable = false, length = 20)
private String brandId;
@ManyToOne
@JoinColumn(name = "TYPE_ID", nullable = false)
private TypeId typeId;
@ManyToOne
@JoinColumn(name = "SIZE_ID", nullable = false)
private SizeId sizeId;
public String getBrandId() {
return brandId;
}
public void setBrandId(String brandId) {
this.brandId= brandId;
}
public TypeId getTypeId() {
return typeId;
}
public void setTypeId (TypeId typeId) {
this.typeId= typeId;
}
public SizeId getSizeId() {
return sizeId;
}
public void setSizeId (SizeId sizeId) {
this.sizeId= sizeId;
}
}
然后,我想基于brandId
. 接口代码:
public interface CardDao extends PagingAndSortingRepository<Car, Long>, QueryDslPredicateExecutor<Car> {
public Car findByBrandId(String brandId);
}
不幸的是,代码是错误的:
“无法根据路径解析属性 [brandId]”。
所以我在 Entity 类中创建了 setter getter brandId
:``
@Entity
@Table(name = "CAR")
public class Car implements Serializable {
private static final long serialVersionUID = -1576946068763487642L;
@EmbeddedId
private CarPk carPk;
public CarPk getCarPk () {
return carPk ;
}
public void setCarPk (CarPk carPk ) {
this.carPk = carPk ;
}
public brandId getBrandId (){
return carPk.getBrandId();
}
public void setBrandId (String brandId){
this.carPk.setBrandId(brandId);
}
}
没有出现错误,但表的汽车数据也没有出现。
我的问题是:
接口代码是真的吗?
brandId
我想知道当brandId的列在课堂上时是否可以通过 找到Embeddable
。实体类中的setter getter
brandId
是真的吗?
谢谢!