Предположим, у меня есть объект, который выглядит следующим образом:запросов в зависимости от типа суб-объекта
@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;
У меня есть два суб entitys, наследуемых от автомобиля они могут выглядеть так
@Entity
public class Truck extends Vehicle {
...
}
@Entity
public class Motorcycle extends Vehicle {
...
}
В Spring Data JPA, как бы я запрашиваю гаражные, который содержит мотоцикл? Также выкидывает другой вопрос, есть ли способ обеспечить соблюдение того, что у Гаража может быть только один из каждого суб-сущности? (Гараж может содержать 1 грузовик + 1 мотоцикл, но не более 1 конкретного транспортного средства)
Так мы предположить, что грузовики и мотоциклы хранятся в одной таблице базы данных? Если да, то какой столбец в этой таблице указывает тип транспортного средства? – woemler
Поскольку тип наследования 'TABLE_PER_CLASS', различные типы транспортных средств хранятся в отдельных таблицах. Поэтому самым простым способом было бы поставить запрос на «VehicleRepository» как «Список findAllDistinctGarages()». Однако, похоже, это не работает из-за проблемы разрешения типа с помощью Spring Data. Я поднял [проблему] (https://jira.spring.io/browse/DATAJPA-1046) с командой Spring Data, чтобы узнать, как это можно решить. Пример проекта доступен в [Github] (https://github.com/manish-in-java/stackoverflow-questions/tree/master/41701838). –
manish
Произошла ошибка в моем примере проекта. Посмотрите сейчас. 'Список findAllDistinctGarages()' on 'VehicleRepository' фактически работает. –
manish