Хранение коллекции моего класса в базе данных

#java #spring #postgresql #hibernate #collections

#java #весна #postgresql #спящий режим #Коллекции

Вопрос:

Мне нужно сохранить в коллекции базы данных моего класса, например:

 class City {
    private String name;
    private List<String> points;
}
  

итак, моя таблица должна выглядеть следующим образом:

 @Entity
class Cities {
    private Date date;
    private List<City> cities;
}
  

итак, как я могу сделать это в весеннем веб-приложении?

Комментарии:

1. «Как я могу сделать», что вы хотите сделать? Это очень непонятно для меня и, возможно, слишком широко.

Ответ №1:

Spring использует режим гибернации для обработки операций с данными базы данных.

Если вы используете eclipse в качестве IDE, вы можете установить плагин Hibernate Tools как часть инструментов JBoss. Инструменты гибернации могут перепроектировать вашу схему базы данных в классы модели домена (сущности).


Для того, чтобы установить его:

  1. Перейдите в раздел Справка> Eclipse Marketplace… и поиск инструментов JBoss. В списке результатов вы должны увидеть «JBoss Tools 4.4.1.Final», нажмите кнопку установить рядом с ней.
  2. После этого вам нужно выбрать функции, которые вы хотите установить. Выберите только инструменты гибернации, затем нажмите подтвердить.
  3. Примите лицензию и нажмите готово.
  4. Перезапустите eclipse

Для того, чтобы настроить его:

  1. Открыть перспективу гибернации в eclipse
  2. В представлении конфигурации гибернации нажмите «Добавить конфигурацию …»
  3. Выберите аннотации (jdk 1.5 )
  4. Для версии гибернации я предпочитаю последнюю версию: 5.2
  5. Просмотрите проект, над которым вы работаете
  6. В разделе Подключение к базе данных нажмите Создать …, выберите тип используемой базы данных, нажмите Далее, добавьте новый драйвер (вам необходимо предоставить jar-файл драйвера JDBC), затем введите данные о подключении к базе данных (база данных, URL, имя пользователя, пароль). Нажмите Test connection, чтобы проверить, прошла ли настройка успешно.
  7. В разделе файла конфигурации нажмите «Настройка», затем «Создать новый …».
  8. Выберите папку src вашего проекта. Имя файла должно оставаться hibernate.cfg.xml . Нажмите далее.
  9. Нажмите «Получить значения из подключения», затем выберите ранее созданный профиль подключения. В диалекте базы данных выберите диалект вашей базы данных. Нажмите Готово. Теперь у вас есть настройка конфигурации базы данных.

Для того, чтобы использовать его:

  1. В меню выберите Выполнить> Спящий режим генерации кода… > Конфигурации генерации кода в режиме гибернации…
  2. Создайте новую конфигурацию запуска.
  3. В конфигурации запуска выберите ранее созданную конфигурацию консоли.
  4. Выходной каталог должен быть папкой src вашего проекта.
  5. Нажмите Обратный инжиниринг из соединения JDBC
  6. Введите имя пакета, в котором вы хотите сгенерировать свои классы сущностей.
  7. На вкладке Экспортеров выберите «Использовать синтаксис Java 5» и «Генерировать аннотации EJB3» и выберите «Код домена (.java)» в разделе экспортеров
  8. Нажмите кнопку Выполнить, затем проверьте, что ваш пакет заполнен классами сущностей.

Я попытался воспроизвести вашу схему в локальной базе данных и запустил генерацию кода.

Вот что у меня получилось:

Point.java:

 @Entity
@Table(name = "point", schema = "public")
public class Point implements java.io.Serializable {

    private int id;
    private City city;
    private double latitude;
    private double longitude;

    public Point() {
    }

    public Point(int id, City city, double latitude, double longitude) {
        this.id = id;
        this.city = city;
        this.latitude = latitude;
        this.longitude = longitude;
    }

    @Id

    @Column(name = "id", unique = true, nullable = false)
    public int getId() {
        return this.id;
    }

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

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "city", nullable = false)
    public City getCity() {
        return this.city;
    }

    public void setCity(City city) {
        this.city = city;
    }

    @Column(name = "latitude", nullable = false, precision = 17, scale = 17)
    public double getLatitude() {
        return this.latitude;
    }

    public void setLatitude(double latitude) {
        this.latitude = latitude;
    }

    @Column(name = "longitude", nullable = false, precision = 17, scale = 17)
    public double getLongitude() {
        return this.longitude;
    }

    public void setLongitude(double longitude) {
        this.longitude = longitude;
    }

}
  

City.java:

 @Entity
@Table(name = "city", schema = "public")
public class City implements java.io.Serializable {

    private String name;
    private Cities cities;
    private Set<Point> points = new HashSet<Point>(0);

    public City() {
    }

    public City(String name, Cities cities) {
        this.name = name;
        this.cities = cities;
    }

    public City(String name, Cities cities, Set<Point> points) {
        this.name = name;
        this.cities = cities;
        this.points = points;
    }

    @Id

    @Column(name = "name", unique = true, nullable = false)
    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "cities", nullable = false)
    public Cities getCities() {
        return this.cities;
    }

    public void setCities(Cities cities) {
        this.cities = cities;
    }

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "city")
    public Set<Point> getPoints() {
        return this.points;
    }

    public void setPoints(Set<Point> points) {
        this.points = points;
    }

}
  

Cities.java:

 @Entity
@Table(name = "cities", schema = "public")
public class Cities implements java.io.Serializable {

    private int id;
    private Date date;
    private Set<City> cities = new HashSet<City>(0);

    public Cities() {
    }

    public Cities(int id, Date date) {
        this.id = id;
        this.date = date;
    }

    public Cities(int id, Date date, Set<City> cities) {
        this.id = id;
        this.date = date;
        this.cities = cities;
    }

    @Id

    @Column(name = "id", unique = true, nullable = false)
    public int getId() {
        return this.id;
    }

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

    @Temporal(TemporalType.DATE)
    @Column(name = "date", nullable = false, length = 13)
    public Date getDate() {
        return this.date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "cities")
    public Set<City> getCities() {
        return this.cities;
    }

    public void setCities(Set<City> cities) {
        this.cities = cities;
    }

}
  

Эта статья должна предоставить вам дополнительную помощь.