Весна-загрузка.Создать и связать таблицу по запросу - PullRequest
0 голосов
/ 12 мая 2018

Я использую Spring boot и реализацию JPA / Hibernate.У меня есть 2 типа таблиц:

  1. ModelPool - список всех моделей (есть только 2 поля: идентификатор и имя)
  2. Model - описание модели (есть миллионыстрок для конкретной модели с некоторыми столбцами и идентификатором в качестве первичного ключа)

В некоторых случаях приложение создает новую модель и добавляет ее в таблицу ModelPool.Таким образом, должна быть 1 таблица modelPool и некоторое количество таблиц моделей.

Полностью понятно, как создать 2 очень большие таблицы, но это решение не подходит из-за низкой производительности.

Iне могу найти способ динамически создавать новую таблицу по запросу и как связать эту новую таблицу с пулом bean-компонента appcontext.

Теперь я ищу JPA @Query для создания sql-запроса самостоятельно, но ядо сих пор не знаю, как связать новую таблицу с модельным бобом.

Может быть, эта проблема типичная и существует типичное решение?

ОБНОВЛЕНО:

@Entity (name = "trackers") 
public class Tracker implements Serializable, Comparable<Tracker> {

@Id
@GeneratedValue
private Integer id;
@Column
private String number;
@Column (name = "devID")
private String devID;
@Column (name ="creationtimestamp")
private long creationTimestamp;
@Column
private double lon;
@Column
private double lat;

public Tracker() {
    this.creationTimestamp = System.currentTimeMillis();
}

@Override
public int compareTo(Tracker that) {
    return Long.compare(this.creationTimestamp, that.creationTimestamp);
}

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}

public String getNumber() {
    return number;
}

public void setNumber(String number) {
    this.number = number;
}

public String getDevID() {
    return devID;
}

public void setDevID(String devID) {
    this.devID = devID;
}

public long getCreationTimestamp() {
    return creationTimestamp;
}

public void setCreationTimestamp(long creationTimestamp) {
    this.creationTimestamp = creationTimestamp;
}

public double getLon() {
    return lon;
}

public void setLon(double lon) {
    this.lon = lon;
}

public double getLat() {
    return lat;
}

public void setLat(double lat) {
    this.lat = lat;
}
}

@Service
public class TrackerService {
@Autowired
private TrackerRepository repository;

public void save(Tracker tracker) {
    repository.save(tracker);
}

public List<Tracker> getAll() {

    return StreamSupport
            .stream(
                    Spliterators.spliteratorUnknownSize(repository.findAll().iterator(), Spliterator.NONNULL),
                    false)
            .sorted(Comparator.reverseOrder())
            .collect(Collectors.toList());
}

}


spring.jpa.hibernate.ddl-auto=none
spring.datasource.url=jdbc:mysql://localhost:3306/avlan_db?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
spring.datasource.username=****
spring.datasource.password=****
spring.jpa.show-sql=true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...