Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/88: Рейтинг темы: голосов - 88, средняя оценка - 4.55
3 / 3 / 14
Регистрация: 26.01.2016
Сообщений: 481

Создание таблиц через Hibernate

19.09.2017, 14:25. Показов 16969. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, почему нельзя создавать таблицы используя hibernate?

Разговаривал с ведущим программистом в одной компании и когда сказал ему, что использую Hibernate для создания таблиц он сказал, что я полностью не прав и что это небезопасно, попросил объяснить почему сказал думай.

Идей нет почему так делать нельзя.

Подскажите кто знает в чем причина, интересно очень.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.09.2017, 14:25
Ответы с готовыми решениями:

Выборочная загрузка через Hibernate или создание через JaxB
Добрый день. загружаю обьект через хибернейт session.load(Class.class, id). Установлена ленивая загрузка. Обьект типа: Entity1{ ...

Отношения таблиц БД в Hibernate
Добрый день, пытаюсь разобраться с Hibernate, до этого приложение было написано с использованием обычных ДАО. Структура такая, у меня...

Hibernate и join нескольких таблиц
Добрый вечер. Есть три класса. Юзер, роль, бонус. Нужно связать через хибернейт все воедино. В Юзере прописана связь многие ко многим и...

14
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
19.09.2017, 22:10
Huge, когда не знаете ответ, идите в гугл. Это куда эффективнее чем ходить на форум. Подумайте по миграции БД с выходом новой версии аппликации наприме.
1
3 / 3 / 14
Регистрация: 26.01.2016
Сообщений: 481
19.09.2017, 23:36  [ТС]
я извиняюсь, ходил, можно меня послать поконкретнее?

Добавлено через 9 минут
Иногда то, что кажется и дураку понятно, некоторым не понятно :-)
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
19.09.2017, 23:37
Huge, https://www.thoughts-on-java.o... ble-model/
1
3 / 3 / 14
Регистрация: 26.01.2016
Сообщений: 481
19.09.2017, 23:45  [ТС]
просто громадное СПС.
я не мог найти, завтра на трезвую почитаю

P.S.
Жизнь прекрасна, всех благ.
0
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
20.09.2017, 13:32
Huge, Я как раз пытаюсь изучать hibernate, и немного не понял сути вопроса.
То есть этот код не создает таблицу EMPLOYEE?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Entity
@Table(name = "EMPLOYEE")
public class Employee {
   @Id @GeneratedValue
   @Column(name = "id")
   private int id;
 
   @Column(name = "first_name")
   private String firstName;
 
   @Column(name = "last_name")
   private String lastName;
  // get, set... 
}
0
149 / 162 / 48
Регистрация: 19.10.2012
Сообщений: 530
20.09.2017, 13:39
Это ентити, которая описывает структуру таблицы.
На основе этого описания хибернейт может провести валидацию структуры схемы, либо изменить ее.
https://docs.jboss.org/hiberna... ons-hbmddl
0
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
20.09.2017, 15:39
KEKCoGEN, Ага, то есть такая возможность есть но это не очень правильно?
Типа сложно изменять/разширять когда код зашит внутри, и лучше создать с hibernate в XML а не Аннотациями?

Добавлено через 4 минуты
Любопытный, то есть этот класс не создает а лишь описывает? (( и надо самому создавать?
А где, в XML (или это тоже описание) или прямо в БД : типа create table EMPLOYEE () и прочие низкоуровнивые SQL?

Добавлено через 1 час 54 минуты
"Я знаю что ничего не знаю". Буду признателен за конструктивную критику, хотябы "это не для того делается", "это не так, не в этом случае", "ты неправильно все понял"..
Я начал учить и если сложится неправильное представление, "логика применения", то все пойдет не так((( Сейчас я в основном читаю а не пишу, так что "шишки" мне не помогут. Начал читать Spring,потом оставил пока не пройду hibernate,а перед тем еще надо JPA.. Вот и не хочу "бездумно" переписывать примеры Spring пока не пойму что к чему. Спасибо.
0
3 / 3 / 14
Регистрация: 26.01.2016
Сообщений: 481
20.09.2017, 16:38  [ТС]
Это класс описывает, но так же Вы можете создавать эту таблицу(или таблицы) сразу в БД.
Вот такая строка в application.properties(Спринг):
Java
1
##spring.jpa.hibernate.ddl-auto=create
Все выглядит примерно так:

Java
1
2
3
4
5
6
7
8
spring.datasource.url=jdbc:postgresql://localhost:5432/NameYourDB
spring.datasource.username=*******
spring.datasource.password=*********
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
#spring.jpa.hibernate.ddl-auto=create
spring.jpa.database=POSTGRESQL
spring.datasource.platform=postgres
spring.jpa.show-sql=false
#spring.jpa.hibernate.ddl-auto=create эта строка создает таблицы
#spring.jpa.hibernate.ddl-auto=update эта строка обновляет, если Вы добавляете ккие-то изменения в БД.
Перед деплоем создаю табл в БД(из Идеи есть такая возможность очень удобно) и сразу отрубаю эти функции. Т.к. на практике сталкивался с глюками.

Использую PostgreSQL, в начале года из-за требований по деплою одного проекта перешел на него и очень нравится, как по мне он проще при описании OneToMany, ManyToMany...

Добавлено через 6 минут
мой совет пишите каждый день и спрашивайте здесь или на stack(e). На этом форуме часто дают более лучший ответ чем на stackoverflow. Хотя бывает и там.
1
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
20.09.2017, 17:53
Лучше описывать структуру бд самим и использовать миграции, как ddl, так и dml. Я использую flywaydb, очень советую
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
20.09.2017, 19:05

Не по теме:

Цитата Сообщение от LeX Посмотреть сообщение
flywaydb
какие преимущества в сравнении с liquibase?



Добавлено через 16 секунд

Не по теме:

Цитата Сообщение от LeX Посмотреть сообщение
flywaydb
какие преимущества в сравнении с liquibase?

0
20.09.2017, 20:59

Не по теме:

xoraxax, Простота :)

Все работает как часы и настраивается очень просто. Liquibase видел, показался сложнее, если не прав - приведи доводы:)

0
21.09.2017, 00:09

Не по теме:

flyway не пробовал, надо будет заценить

0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
21.09.2017, 11:42
я тоже пользуюсь flyway. liquibase не использовал. У flyway есть проблема поддержки бренчей. Как с этим в Liquibase?
0
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
29.09.2017, 20:36
Подкажите пожалуйста с проблемой.

Дано 3 таблицы и связимежду ними : Student -(ManyToMany)- Teacher -(OneToMany и наоборот)- Laptop -(OneToOne)- Student. Все аннотациями замапено, таблицы создаются и данные сохраняются в основные таблицы.

1) Проблема : в автоматически созданной таблице Student_Teacher неотображаются ForeginFey (PrimaryKey для Student ,Teacher ), таблица пуста хотя там должны сохранятся ключи.
2) К таблице Laptop успешно присоеденено столбец "Teacher "(соед. ManyToOne), но те могу присоединить столбец с таблицы Student (OneToOne), Попытался вот так :
Java
1
2
3
4
@OneToOne
    @PrimaryKeyJoinColumn
    @JoinColumn(name = "Student_ref", referencedColumnName = "Student_name")
    private Student2 student2;
в результате появился столбец Student_ref который заполненый <NULL>

Вот основной код :

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@Entity
@Table(name = "Students_Laptop")
public class Laptop implements Serializable {
 
    private static final long serialVersionUID = 1L;
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    
    @Column(name = "Name_of_Company", length = 50)
    private String name;
    
    @Column(name = "How_old_are")
    private int age;
    
    @OneToOne
    @PrimaryKeyJoinColumn
    @JoinColumn(name = "Student_ref", referencedColumnName = "Student_name")
//    @JoinColumn(name = "Student_ref")
    private Student2 student2;
    
    @ManyToOne
    @JoinColumn(name = "teacher_laptop")
    private Teacher teacher;
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Entity
@Table(name = "Teachers_table")
public class Teacher implements Serializable {
 
    private static final long serialVersionUID = 1L;
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    
    @Column(name = "Teachers_name")
    private String name;
    
    @OneToMany(mappedBy = "teacher")
    private Set<Laptop> laptops = new HashSet<>();
    
    @ManyToMany(mappedBy = "teachers")
    private Set<Student2> students= new HashSet<>();
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
@Entity
@Table(name = "Student")
public class Student2 implements Serializable {
 
    private static final long serialVersionUID = 1L;
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    
    @Column(name = "Student_name", length = 25)
    private String name;
    
    @Column(name = "Student_Surname", length = 50)
    private String surName;
    
    @Column(name = "Students_age")
    private int age;
    
    @OneToOne(mappedBy = "student2")  
//    @Column(name = "laptop_ref")
    private Laptop laptop;
    
    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "StudentToTeacher",
            joinColumns = {@JoinColumn(name = "Student_Id")},
            inverseJoinColumns = {@JoinColumn(name = "Teacher_Id")})
    private Set<Teacher> teachers = new HashSet<>();
XML
1
2
3
<mapping class="com.mycompany.Entitys.Student2"/>
    <mapping class="com.mycompany.Entitys.Laptop"/>
    <mapping class="com.mycompany.Entitys.Teacher"/>
Спасибо.

Добавлено через 15 секунд
Подкажите пожалуйста с проблемой.

Дано 3 таблицы и связимежду ними : Student -(ManyToMany)- Teacher -(OneToMany и наоборот)- Laptop -(OneToOne)- Student. Все аннотациями замапено, таблицы создаются и данные сохраняются в основные таблицы.

1) Проблема : в автоматически созданной таблице Student_Teacher неотображаются PrimaryKey, таблица пуста хотя там должны сохранятся ключи.
2) К таблице Laptop успешно присоеденено столбец "Teacher "(соед. ManyToOne), но те могу присоединить столбец с таблицы Student (OneToOne), Попытался вот так :
Java
1
2
3
4
@OneToOne
    @PrimaryKeyJoinColumn
    @JoinColumn(name = "Student_ref", referencedColumnName = "Student_name")
    private Student2 student2;
в результате появился столбец Student_ref который заполненый <NULL>

Вот основной код :

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@Entity
@Table(name = "Students_Laptop")
public class Laptop implements Serializable {
 
    private static final long serialVersionUID = 1L;
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    
    @Column(name = "Name_of_Company", length = 50)
    private String name;
    
    @Column(name = "How_old_are")
    private int age;
    
    @OneToOne
    @PrimaryKeyJoinColumn
    @JoinColumn(name = "Student_ref", referencedColumnName = "Student_name")
//    @JoinColumn(name = "Student_ref")
    private Student2 student2;
    
    @ManyToOne
    @JoinColumn(name = "teacher_laptop")
    private Teacher teacher;
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Entity
@Table(name = "Teachers_table")
public class Teacher implements Serializable {
 
    private static final long serialVersionUID = 1L;
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    
    @Column(name = "Teachers_name")
    private String name;
    
    @OneToMany(mappedBy = "teacher")
    private Set<Laptop> laptops = new HashSet<>();
    
    @ManyToMany(mappedBy = "teachers")
    private Set<Student2> students= new HashSet<>();
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
@Entity
@Table(name = "Student")
public class Student2 implements Serializable {
 
    private static final long serialVersionUID = 1L;
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    
    @Column(name = "Student_name", length = 25)
    private String name;
    
    @Column(name = "Student_Surname", length = 50)
    private String surName;
    
    @Column(name = "Students_age")
    private int age;
    
    @OneToOne(mappedBy = "student2")  
//    @Column(name = "laptop_ref")
    private Laptop laptop;
    
    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "StudentToTeacher",
            joinColumns = {@JoinColumn(name = "Student_Id")},
            inverseJoinColumns = {@JoinColumn(name = "Teacher_Id")})
    private Set<Teacher> teachers = new HashSet<>();
XML
1
2
3
<mapping class="com.mycompany.Entitys.Student2"/>
    <mapping class="com.mycompany.Entitys.Laptop"/>
    <mapping class="com.mycompany.Entitys.Teacher"/>
Спасибо.

Добавлено через 1 час 1 минуту
Кстати, геттеры и сеттеры обычных полей есть (но не множеств).
Я делал за примерами все вроде бы сопадает, но сейчас наткнулся на другие примеры и там аннотаци не над полями а над гэт методами, в том числе и над геттерами множеств и Id.
Может проблема в этом или я сейчас сделаю "композицию" разных примеров и все обвалится?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.09.2017, 20:36
Помогаю со студенческими работами здесь

Hibernate, формирование таблиц БД при деплое на хостинг, application.properties
Добрый день. Возник вопрос при деплое на хостинг hibernate не создает таблицы вот так пробую создавать: БД только создана и не к...

Создание копии сущности в Hibernate
Добрый день. Есть сущность Юзер(User.class), которая имеет список сущностей Lesson( Array&lt;Lesson&gt;), которая в свою очередь имеет...

Проблемы с Hibernate через анотации
Всем доброй ночи! Помогите пож. , выручте не могу заполнить таблицу в Java, поключена библиотеки JAVA-Hibernate, MySQL при заполнении...

Создание таблиц в БД по сущностям Hibernate
Добренького времени! Пытаюсь прописать конфигурацию Hibernate так, чтобы он автоматически создавал нужные таблицы по сущностям...

Создание таблиц через SQL
Поделитесь пожалуйста материалами, примерами, как создать правильно SQL запрос в Access на создание таблиц, установку первичного ключа и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru