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

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

05.12.2016, 20:36. Показов 1555. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru