我想制作一张桌子,让我们说桌子的名字是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;
}
}
所以,我正在使用Google搜索并发现我可以使用@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类:
@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);
}
不幸的是,代码是错误的:
&#34;无法根据路径&#34;解析属性[brandId]。
所以我在Entity类中为brandId
创建了setter getter:``
@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
时,brandId
是否可以找到它。
实体类中array[0] = [1, 2, 3, 4]
array[1] = [2, 3, 4, 5]
array[2] = [3, 4, 6, 10, 15, 20]
array[3] = [15, 20, 25]
的setter getter是真的吗?
谢谢!