транзакция с OneToMany

141
22 мая 2019, 01:00

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

@Entity(name = "students")
public class Student {
@Id
@GeneratedValue
private int id;
private int age=200;
private String name;
@OneToMany(cascade = CascadeType.ALL)
private List<Adress> adreses;
public Student() {
}
public Student(String name, List<Adress> adress) {
    this.name = name;
    this.adreses = adress;
}
}

Класс который содержит коллекция:

@Entity
public class Adress implements IAdress{
@Id
@GeneratedValue
private int id;
private String street = "Volkova";
private int numbe = 43;
public Adress(String street, int numbe) {
    this.street = street;
    this.numbe = numbe;
}
public Adress() {
}
}

Транзакция тут:

public class Main {
public static void main(String[] args) {
    Adress adress1 = new Adress("Volkov",31);
    Adress adress2 = new Adress("Lenin",13);
    List<Adress> adresses = new ArrayList<>();
    adresses.add(adress1);
    adresses.add(adress2);
    Student student = new Student("Marina",adresses);
    try (SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
    Session session = sessionFactory.openSession()) {
        session.beginTransaction();
        session.persist(student);
        session.getTransaction().commit();
    }
}
}

и еще

public class HibernateUtil {
private static final SessionFactory sessionFactory = 
configureSessionFactory();
private static ServiceRegistry serviceRegistry;
/**
 * Создание фабрики
 * @return {@link SessionFactory}
 * @throws HibernateException
 */
private static SessionFactory configureSessionFactory() throws 
HibernateException {
    StandardServiceRegistry standardRegistry = new 
StandardServiceRegistryBuilder()
            .configure("hibernate.cfg.xml").build();
    Metadata metadata = new 
MetadataSources(standardRegistry).getMetadataBuilder().build();
    return metadata.getSessionFactoryBuilder().build();
}
/**
 * Получить фабрику сессий
 * @return {@link SessionFactory}
 */
public static SessionFactory getSessionFactory() {
    return sessionFactory;
}
}

Ошибка

WARN: SQL Error: 0, SQLState: 42703
дек. 02, 2018 1:42:44 ПП org.hibernate.engine.jdbc.spi.SqlExceptionHelper 
logExceptions
ERROR: ОШИБКА: столбец i.indproc не существует
  Подсказка: Возможно, предполагалась ссылка на столбец "i.indpred".
  Позиция: 610
дек. 02, 2018 1:42:44 ПП org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl stop
INFO: HHH10001008: Cleaning up connection pool [jdbc:postgresql://localhost:5432/postgres]
Exception in thread "main" java.lang.ExceptionInInitializerError
    at com.reactionsSupport.workDB.Main.main(Main.java:21)
Caused by: org.hibernate.exception.SQLGrammarException: Error accessing index information: students_adress
    at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:106)
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99)
    at org.hibernate.tool.schema.extract.internal.InformationExtractorJdbcDatabaseMetaDataImpl.convertSQLException(InformationExtractorJdbcDatabaseMetaDataImpl.java:98)
    at org.hibernate.tool.schema.extract.internal.InformationExtractorJdbcDatabaseMetaDataImpl.getIndexes(InformationExtractorJdbcDatabaseMetaDataImpl.java:759)
    at org.hibernate.tool.schema.extract.internal.TableInformationImpl.indexes(TableInformationImpl.java:122)
    at org.hibernate.tool.schema.extract.internal.TableInformationImpl.getIndex(TableInformationImpl.java:138)
    at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applyUniqueKeys(AbstractSchemaMigrator.java:370)
    at org.hibernate.tool.schema.internal.GroupedSchemaMigratorImpl.performTablesMigration(GroupedSchemaMigratorImpl.java:85)
    at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.performMigration(AbstractSchemaMigrator.java:207)
    at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:114)
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:183)
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:72)
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:310)
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:467)
    at com.reactionsSupport.workDB.HibernateUtil.configureSessionFactory(HibernateUtil.java:26)
    at com.reactionsSupport.workDB.HibernateUtil.<clinit>(HibernateUtil.java:14)
    ... 1 more
Caused by: org.postgresql.util.PSQLException: ОШИБКА: столбец i.indproc не существует
  Подсказка: Возможно, предполагалась ссылка на столбец "i.indpred".
  Позиция: 610
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2103)
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1836)
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:512)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:374)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)
    at org.postgresql.jdbc2.AbstractJdbc2DatabaseMetaData.getIndexInfo(AbstractJdbc2DatabaseMetaData.java:4127)
    at org.hibernate.tool.schema.extract.internal.InformationExtractorJdbcDatabaseMetaDataImpl.getIndexes(InformationExtractorJdbcDatabaseMetaDataImpl.java:719)
    ... 13 more

Answer 1

Пересоздал проект через Spring Boot и все стало работать как надо - проблема решена

READ ALSO
Не получается подключить Tomcat 9 на ubuntu

Не получается подключить Tomcat 9 на ubuntu

Не могу запустить tomcat из папки opt/

122
Как сравнить choiceBox с другим choiceBox?

Как сравнить choiceBox с другим choiceBox?

Я делаю конвертер и мне нужно, чтобы я выбирал в одном choiceBox одну валюту, в другом другую и курс менялсяСами choiceBox`ы у меня есть

148
Как передать объект на websocket?

Как передать объект на websocket?

Начал разбираться в вебсокетами, и пробую написать небольшой чат Ноду особо не знаю, для работы с базой на бекенде php-фреймворк, все запросы...

143