Для проекта, над которым я работаю, мне нужно сохранить несколько POJO в базе данных. Определения классов POJO иногда сильно вложены, но они должны сглаживаться, так как вложенность является древовидной и не содержит циклов (а базовые элементы в конечном счете являются примитивами/строками). Предпочтительно, чтобы используемое решение создавало одну таблицу для каждого типа данных и чтобы таблицы имели одно поле на примитивный элемент в POJO. Подклассы и подобные проблемы не являются проблемами для этого конкретного проекта.Автоматическое сохранение сложного Java-объекта
Кто-нибудь знает о каких-либо существующих решений, которые могут:
- Автоматически генерировать
CREATE TABLE
определение из определения класса - Автоматически генерировать запрос сохранить объект в базе данных, учитывая экземпляр объекта
- Автоматически формировать запрос для извлечения объекта из базы данных и возвращать его как POJO, учитывая ключ.
Решения, которые могут сделать это с минимальными изменениями/аннотациями к файлам классов и минимальной внешней конфигурации, являются предпочтительными.
Пример:
Java классы
//Class to be persisted
class TypeA {
String guid;
long timestamp;
TypeB data1;
TypeC data2;
}
class TypeB {
int id;
int someData;
}
class TypeC {
int id;
int otherData;
}
Может сопоставить
CREATE TABLE TypeA (
guid CHAR(255),
timestamp BIGINT,
data1_id INT,
data1_someData INT,
data2_id INt,
data2_otherData INT
);
или что-то подобное.
Я смотрел в Hibernate, но не смог найти никаких функций, которые позволили бы автоматически генерировать описания SQL, учитывая уже существующие описания классов. Знаете ли вы о какой-либо части спящего режима, которую можно использовать для этого (или это может послужить основой для какого-то Googling)? – VeeArr
Вам нужен фактический SQL для ведения журнала? Я имею в виду, что Hibernate будет выполнять SQL для всего этого, включая создание ваших таблиц в выбранной вами базе данных. Существует опция ведения журнала, которая позволяет также сбрасывать SQL. Если вы действительно хотите манипулировать SQL в своей программе (почему?), Это может быть выполнимо, но я не уверен, как это сделать. – Uri
Я не понял, извините. Я имел в виду, что я не хотел, чтобы мне приходилось самостоятельно создавать таблицы вручную, и я не хотел, чтобы я делал однополярное сопоставление объектов Java с полями в базе данных. Мне не нужно использовать фактический SQL (кроме, возможно, протоколов, как вы сказали). – VeeArr