Моделирование необязательного отношения один ко многим - следует ли использовать наследование? - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь смоделировать метеослужбу, которая поддерживает несколько местоположений.В моем приложении есть 3 объекта:

  1. Местоположение - информация о местоположении
  2. Погода (включая идентификатор местоположения) - Данные о погоде за один час
  3. LocationWeather - ПодклассМестоположение, содержащее список погоды

Я хочу, чтобы местоположение иногда существовало как отдельная сущность от погоды.Таким образом, я могу выставлять CRUD-операции на объекте Location без переноса всех его данных о погоде.Тем не менее, я все еще хочу удовлетворить основной сценарий возврата погоды для данного местоположения, поэтому LocationWeather существует.

Можно ли сделать то, что я хочу, с помощью наследования?Я пробовал

@Entity
@Table(name="location")
@Inheritance(strategy = InheritanceType.JOINED)
public class Location {

, но мой подкласс (LocationWeather) не связан напрямую с таблицей.Должен ли я переместить свой Список погоды до объекта Location и каким-то образом пометить его как необязательный?

Location.java

@Entity
@Table(name="location")
public class Location {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="location_id")
    private int id;

    @Column(name="name")
    private String name;

Weather.java

@Entity
@IdClass(WeatherId.class)
@Table(name="weather")
public class Weather {

    @Id
    @Column(name="location_id")
    private int locationId;

    @Id
    @Column(name="time")
    private Date time;

    @Column(name="temperature")
    private Double temperature;

LocationWeather.java

@Entity
public class LocationWeather extends Location{

    @ElementCollection
    @CollectionTable(name="weather", joinColumns= {@JoinColumn(name="location_id")})
    @Column(name="weather")
    private List<Weather> weather;

1 Ответ

0 голосов
/ 09 мая 2019

Разобрался. Я гуглил не те вещи. Я должен был искать "2 лица 1 стол"

Мне удалось решить эту проблему, создав @MappedSuperclass и создав Location и LocationWeather в качестве его подкласса.

Теперь у меня есть:

MappedLocation.java

@MappedSuperclass
public class MappedLocation {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="location_id")
    private int id;

    @Column(name="name")
    private String name;

Location.java

@Entity
@Table(name="location")
public class Location extends MappedLocation {

}

LocationWeather.java

@Entity
public class LocationWeather extends MappedLocation{

    @ElementCollection
    @CollectionTable(name="weather", joinColumns= {@JoinColumn(name="location_id")})
    @Column(name="weather")
    private List<Weather> weather;

Дополнительная информация: https://thoughts -on-java.org / hibernate-tips-map-множественные сущности-же-таблица /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...