#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. Инструменты гибернации могут перепроектировать вашу схему базы данных в классы модели домена (сущности).
Для того, чтобы установить его:
- Перейдите в раздел Справка> Eclipse Marketplace… и поиск инструментов JBoss. В списке результатов вы должны увидеть «JBoss Tools 4.4.1.Final», нажмите кнопку установить рядом с ней.
- После этого вам нужно выбрать функции, которые вы хотите установить. Выберите только инструменты гибернации, затем нажмите подтвердить.
- Примите лицензию и нажмите готово.
- Перезапустите eclipse
Для того, чтобы настроить его:
- Открыть перспективу гибернации в eclipse
- В представлении конфигурации гибернации нажмите «Добавить конфигурацию …»
- Выберите аннотации (jdk 1.5 )
- Для версии гибернации я предпочитаю последнюю версию: 5.2
- Просмотрите проект, над которым вы работаете
- В разделе Подключение к базе данных нажмите Создать …, выберите тип используемой базы данных, нажмите Далее, добавьте новый драйвер (вам необходимо предоставить jar-файл драйвера JDBC), затем введите данные о подключении к базе данных (база данных, URL, имя пользователя, пароль). Нажмите Test connection, чтобы проверить, прошла ли настройка успешно.
- В разделе файла конфигурации нажмите «Настройка», затем «Создать новый …».
- Выберите папку src вашего проекта. Имя файла должно оставаться hibernate.cfg.xml . Нажмите далее.
- Нажмите «Получить значения из подключения», затем выберите ранее созданный профиль подключения. В диалекте базы данных выберите диалект вашей базы данных. Нажмите Готово. Теперь у вас есть настройка конфигурации базы данных.
Для того, чтобы использовать его:
- В меню выберите Выполнить> Спящий режим генерации кода… > Конфигурации генерации кода в режиме гибернации…
- Создайте новую конфигурацию запуска.
- В конфигурации запуска выберите ранее созданную конфигурацию консоли.
- Выходной каталог должен быть папкой src вашего проекта.
- Нажмите Обратный инжиниринг из соединения JDBC
- Введите имя пакета, в котором вы хотите сгенерировать свои классы сущностей.
- На вкладке Экспортеров выберите «Использовать синтаксис Java 5» и «Генерировать аннотации EJB3» и выберите «Код домена (.java)» в разделе экспортеров
- Нажмите кнопку Выполнить, затем проверьте, что ваш пакет заполнен классами сущностей.
Я попытался воспроизвести вашу схему в локальной базе данных и запустил генерацию кода.
Вот что у меня получилось:
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;
}
}