假设我有一个如下所示的实体:
@Entity
public class Garage {
...
@Column(unique = true, nullable = false)
private String garageId;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "garage")
private Set<Vehicle> vehicles = new HashSet<>();
...
}
车辆实体如下所示:
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Vehicle{
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private Long id;
@ManyToOne(optional = false, fetch = FetchType.LAZY)
@JoinColumn(name = "garage_id", referencedColumnName = "garageId", nullable = false)
private Garage garage;
我有两个继承自车辆的子实体,它们可能如下所示
@Entity
public class Truck extends Vehicle {
...
}
@Entity
public class Motorcycle extends Vehicle {
...
}
在 Spring Data JPA 中,我如何查询包含摩托车的车库?同时抛出另一个问题,有没有办法强制车库每个子实体只能有一个? (一个车库可以容纳 1 辆卡车 + 1 辆摩托车,但特定车辆不得超过 1 辆)
最佳答案
我假设您有一个 Garage 存储库,在该界面中定义以下方法。
List<Garage> findByVehicles(Vehicle vehicle);
然后,假设您有一个名为 Motorola 的 Motorcyle 实例,您可以使用以下命令来调用它:
List<Garage> garagesWithMotorcyle = garageRepository.findByVehicles(motorcyle);
关于java - 根据子实体类型查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41701838/