java - 根据子实体类型查询

标签 java spring spring-data spring-data-jpa

假设我有一个如下所示的实体:

@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/

相关文章:

spring - 使用 spring data hadoop 写入 HDFS 时出现问题

java - ORMLite 的当前时间戳?

java - 如何在此 Java 代码之上添加心跳消息(用于 KnockKnockClient/Server)?

java - 无法将 Spring Boot 应用程序启动到 Linux 服务器

java - 查询方法 public abstract java.util.List 的验证失败

java - Spring 时间表相互冲突

java - ArrayList 还是几个 for 循环?

JSF 中的 Java 上传文件名土耳其语字符问题 - Primefaces

spring - 如何在 Spring 4 中混合使用 Cglib 和 JDK Proxy

java - JUnit 测试用例 : Argument(s) are different! 需要: