Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
88 / 86 / 55
Регистрация: 14.11.2015
Сообщений: 1,099

Сохранения объектов стандартной библиотеки с Hibernate

05.12.2016, 20:36. Показов 1538. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть коллекция типа Circle(https://docs.oracle.com/javase... ircle.html) и я хочу сохранить эту коллекцию в таблицу с тремя колонками: id, x, y.

Как сохранять мною созданные объекты я знаю, а что делать с объектами стандартной библиотеки? Я могу создать свой класс Circle и заново прописать там всю логику, которая мне нужна, но можно как-то сохранить именно стандартный Circle?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.12.2016, 20:36
Ответы с готовыми решениями:

Изменение стандартной папки для сохранения всех файлов (Ubuntu)
ОС: Linux Ubuntu ПО: Free Pascal Вопрос: FP изначально своей рабочей папкой считает "/home/*имя_пользователя*/" и после работы в...

Подключение стандартной библиотеки с++
При подключении библиотеки <QProcess> следующая ошибка. Помогите ламеру :wall:

Структура стандартной библиотеки
У меня возник вопрос по теме того, что чем является. Допустим, такой пример: В википедии написано, что функция fopen является частью...

12
 Аватар для KuKu
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
05.12.2016, 20:57
Можно написать маппинг классов через xml.
1
88 / 86 / 55
Регистрация: 14.11.2015
Сообщений: 1,099
11.12.2016, 13:44  [ТС]
Кидает ошибки:
1. Getters of lazy classes cannot be final: javafx.scene.shape.Circle.centerX
2. Setters of lazy classes cannot be final: javafx.scene.shape.Circle.centerX
3. java.lang.ClassNotFoundException: org.hibernate.proxy.HibernateProxy
...

Что делать с final геттерами/сеттерами в таком случае? Вот мой код, если понадобиться.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import javafx.scene.shape.Circle;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
 
public class Test {
    public static void main(String[] args) {
        Circle circle = new Circle(50,60,2);
 
        SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
        Session session = sessionFactory.openSession();
        session.beginTransaction();
        session.save(circle);
        session.getTransaction().commit();
    }
}
hibernate.cfg.xml
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">root</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <mapping resource="Circle.hbm.xml"/>
    </session-factory>
</hibernate-configuration>
Circle.hbm.xml
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
<hibernate-mapping>
    <class name="javafx.scene.shape.Circle" table="Points">
        <meta attribute="class-description">
            This class contains the coordinates of points.
        </meta>
        <id name="id" type="int" column="id">
            <generator class="increment"/>
        </id>
        <property name="centerX" column="x_coordinate" type="string"/>
        <property name="centerY" column="y_coordinate" type="string"/>
    </class>
</hibernate-mapping>
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
11.12.2016, 19:58
Лучший ответ Сообщение было отмечено Artmal как решение

Решение

попробуй добавить lazy=false для класса:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
<hibernate-mapping>
    <class name="javafx.scene.shape.Circle" table="Points" lazy="false">
        <meta attribute="class-description">
            This class contains the coordinates of points.
        </meta>
        <id name="id" type="int" column="id">
            <generator class="increment"/>
        </id>
        <property name="centerX" column="x_coordinate" type="string"/>
        <property name="centerY" column="y_coordinate" type="string"/>
    </class>
</hibernate-mapping>
Добавлено через 35 секунд
а вообще лучше делать отдельную entity и мапить туда и обратно

Добавлено через 1 минуту
кстати почему type="string"? там же double
1
88 / 86 / 55
Регистрация: 14.11.2015
Сообщений: 1,099
11.12.2016, 21:42  [ТС]
Цитата Сообщение от LeX Посмотреть сообщение
а вообще лучше делать отдельную entity и мапить туда и обратно
Имеется ввиду создавать свой кастомный Circle?

Цитата Сообщение от LeX Посмотреть сообщение
кстати почему type="string"? там же double
думал, что здесь нужно указывать тип, который будет использоваться в самой бд.

Цитата Сообщение от LeX Посмотреть сообщение
попробуй добавить lazy=false для класса:
Решило проблему с exception с геттерами/сеттерами, но теперь просто не добавляет данные в БД и не выдает никаких ошибок:
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
груд. 11, 2016 8:39:04 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {5.2.3.Final}
груд. 11, 2016 8:39:04 PM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
груд. 11, 2016 8:39:04 PM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
груд. 11, 2016 8:39:05 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
груд. 11, 2016 8:39:06 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)
груд. 11, 2016 8:39:06 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001005: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/test]
груд. 11, 2016 8:39:06 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001001: Connection properties: {user=root, password=****}
груд. 11, 2016 8:39:06 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001003: Autocommit mode: false
груд. 11, 2016 8:39:06 PM org.hibernate.engine.jdbc.connections.internal.PooledConnections <init>
INFO: HHH000115: Hibernate connection pool size: 20 (min=1)
Sun Dec 11 20:39:06 EET 2016 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
груд. 11, 2016 8:39:07 PM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect
груд. 11, 2016 8:39:07 PM org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection
INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@71c5b236] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.
 
Process finished with exit code 1
0
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
12.12.2016, 00:49
Artmal, попробуйте вызвать метод flush после save, но не факт, что поможет
0
88 / 86 / 55
Регистрация: 14.11.2015
Сообщений: 1,099
12.12.2016, 11:41  [ТС]
Fene4ka_, на Stack Overflow пишут, что Hibernate делает flush автоматически(по умолчанию) после commit().

Сейчас увидел ошибку:
ERROR: HHH000123: IllegalArgumentException in class: javafx.scene.shape.Circle, setter method of property: id
груд. 12, 2016 10:38:13 AM org.hibernate.property.access.spi.Setter MethodImpl set
ERROR: HHH000091: Expected type: java.lang.String, actual value: java.lang.Integer

Как я понял, идет попытка загрузить id, которого в классе Circle нет. Подскажите, как сделать так, чтобы в таблице создавалось независимое поле id, которое бы инкрементировалось с каждой новой записью и не зависело от Circle.
0
 Аватар для KuKu
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
12.12.2016, 12:07
В классе Circle getId и setId работают со строкой.
1
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
12.12.2016, 16:21
Artmal, сделай в бд sequence и trigger

Добавлено через 42 секунды
Artmal, или может просто задай у поля id параметр auto increment ?
0
88 / 86 / 55
Регистрация: 14.11.2015
Сообщений: 1,099
12.12.2016, 23:06  [ТС]
Цитата Сообщение от KuKu Посмотреть сообщение
В классе Circle getId и setId работают со строкой.
А generator class = "increment" требует как раз таки integer. Как в таком случае поступить?

Добавлено через 19 минут
С кастомным классом все хорошо работает.
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import javafx.scene.shape.Circle;
 
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
 
@Entity
public class MyCircle extends Circle {
    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    private int id;
    private double xCoordinate;
    private double yCoordinate;
 
    public MyCircle() { }
 
    public MyCircle(double xCoordinate, double yCoordinate) {
        this.xCoordinate = xCoordinate;
        this.yCoordinate = yCoordinate;
    }
 
    public MyCircle(int id, double xCoordinate, double yCoordinate) {
        this.id = id;
        this.xCoordinate = xCoordinate;
        this.yCoordinate = yCoordinate;
    }
 
    public int getCircleId() {
        return id;
    }
 
    public void setCircleId(int id) {
        this.id = id;
    }
 
    public double getxCoordinate() {
        return xCoordinate;
    }
 
    public void setxCoordinate(double xCoordinate) {
        this.xCoordinate = xCoordinate;
    }
 
    public double getyCoordinate() {
        return yCoordinate;
    }
 
    public void setyCoordinate(double yCoordinate) {
        this.yCoordinate = yCoordinate;
    }
}
Но все же интересует маппинг стандартного Circle, т.к думаю это будет меньше кода(лишний класс). Я просто не знаю принятых практик. Как в таких случаях делают? Пишут маппинг или создают кастомный класс?
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
12.12.2016, 23:17
обычно создают отдельный набор классов, "модель хранения", т.к. часто она бывает заточена именно на удобный маппинг в бд, нежели на удобное использование в бизнес логике
1
88 / 86 / 55
Регистрация: 14.11.2015
Сообщений: 1,099
12.12.2016, 23:19  [ТС]
Вы говорите, про model в MVC, правильно понимаю?
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
12.12.2016, 23:28
все зависит от контекста, модель в MVC может быть разной.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.12.2016, 23:28
Помогаю со студенческими работами здесь

Реализация стандартной библиотеки
В заголовочном файле vector находится реализация контейнера vector Стандартная библиотека C++ реализована в заголовочных файлах?

Контейнер стандартной библиотеки
Привет народ ! Вот хотел узнать библиотеки в этой проге :#include &lt;iostream&gt; // для использования std::cout #include &lt;vector&gt;...

литература стандартной библиотеки C++
Вопрос - какую именно скачать книгу для изучения всех библиотек и их метадов. Ну может самых важных, нужных. Искал, интернет выдаёт...

Использование стандартной библиотеки cstring
Добрый день. Столкнулся с маленькой проблемой хочу понять более подробные возможности С++. Задача: Напишите программу , которая просит...

Использование функций стандартной библиотеки Си


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru